更新在Rails中具有关联的记录时出现问题

时间:2010-12-01 02:26:58

标签: ruby-on-rails activerecord ruby-on-rails-3

我无法更新在Rails中具有关联的记录。

例如,我有一个Post模型和一个User模型。在post.rb中,我添加了关联belongs_to :user

如果我想更改现有Post记录的user_id字段,则它不起作用。

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

以上内容不会将Post记录的user_id字段更改为5.当我删除关联时,上述代码可以正常工作。

有没有办法在不删除关联的情况下更新user_id字段?

谢谢!

2 个答案:

答案 0 :(得分:1)

执行此操作的“正确”方法是让Rails完成所有繁重工作,如下所示:

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

......如果符合所有验证,它将起作用。

可替换地:

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

...虽然你可能想在使用后者之前三思而后行! : - )

彼得

答案 1 :(得分:1)

您写道:

  

这些示例看起来应该可以正常工作,但由于某种原因,user_id保持不变。也许它与验证有关

通过将"save"替换为"save!"

,您可以轻松验证是否由于验证

如果任何验证失败,前者只返回false,而后者将引发异常:

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
>> _
祝你好运!