我无法更新在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字段?
谢谢!
添
答案 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
>> _
祝你好运!