2010-12-01 56 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字段而不刪除關聯?

謝謝!

+0

這應該起作用,儘管直接分配ID不常見。你有錯誤信息嗎? – zetetic 2010-12-01 05:05:42

+0

用戶ID = 5是否存在? – hade 2010-12-01 08:35:50

回答

1

您寫道:

這些例子看起來像他們應該工作,但由於某種原因,USER_ID保持不變。也許它有什麼用"save!"

前者剛剛返回false如果任何驗證失敗更換"save"做的驗證

您可以輕鬆地驗證,如果是由於驗證,而後者將提高例外:

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

或者,你也可以做到在Rails控制檯以下:

>> 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 
>> _ 

祝你好運!

1

「正確」的方式做到這一點是讓Rails的做所有的繁重工作,具體如下:

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

...這將工作,假設所有的驗證,滿足。

或者:

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

...雖然你可能想使用後者三思而後行! :-)

彼得