2010-12-01 24 views
0

Railsでアソシエーションを持つレコードを更新できません。Railsでアソシエーションを持つレコードを更新する際の問題

例えば、私はPostモデルとUserモデルを持っています。 post.rbには、アフィリエイトbelongs_to :userが含まれています。

既存のポストレコードのuser_idフィールドを変更したい場合、それは機能しません。

p = Post.find(1) 
p.user_id = 5 
p.save 

上記はPostレコードのuser_idフィールドを5に変更しません。関連付けを削除すると、上記のコードが機能します。

関連付けを削除せずにuser_idフィールドを更新する方法はありますか?

ありがとうございます!

ティム

これを行うには「正しい」方法は、次のようにRailsのは、すべての重量物の持ち上げを行うようにすることです
+0

これは機能するはずですが、IDを直接割り当てることは珍しいことです。エラーメッセージが表示されますか? – zetetic

+0

id = 5のユーザーは存在しますか? – hade

+0

はい、IDが5のユーザーは存在します。私はエラーメッセージを受け取っていません。私はコンソールでこれを試してみると、それは本当だと言います。しかし、user_idは変更されません。 – Tim

答えて

1

あなたは書いている:彼らは動作するはずのよう

これらの例には見えますが、何らかの理由でのuser_idは変わりません。後者は発生します、一方、多分それは、"save!"

検証のいずれかが失敗した場合、前者は単にfalseを返すと"save"を置き換えることによって、あなたは簡単にそれを検証するため、だかどうかを確認することができます

検証とは何かを持っています例外:

>> p = Post.find(1) 
... 
>> p.user = User.find(5) 
... 
>> p.valid? 
... 
>> # will be either true or false, depending on validations 
>> p.errors.full_messages 
... 
>> # will be either [] or else a non-empty array of all validation failures 
>> _ 
:また

p = Post.find(1) 
p.user = User.find(5) 
p.save! 

は、あなたはまた、Railsのコンソールで次の操作を行うことができます

幸運を祈る!

1

:すべての検証を想定して動作します

p = Post.find(1) 
p.user = User.find(5) 
p.save 

が...、満たされています。また

Post.find(1).update_attribute(:user_id, 5) 

...あなたはおそらく後者を使用する前に二度考えたいが! :-)

ピーター

+0

答えをありがとう。これらの例はうまくいくはずですが、なんらかの理由でuser_idは変更されません。多分それはバリデーションと関係があります – Tim

関連する問題