更新在Rails中具有关联性的记录的问题
问题描述:
我无法更新在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字段而不删除关联?
谢谢!
添
答
您写道:
这些例子看起来像他们应该工作,但由于某种原因,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
>> _
祝你好运!
答
“正确”的方式做到这一点是让Rails的做所有的繁重工作,具体如下:
p = Post.find(1)
p.user = User.find(5)
p.save
...这将工作,假设所有的验证,满足。
或者:
Post.find(1).update_attribute(:user_id, 5)
...虽然你可能想使用后者三思而后行! :-)
彼得
这应该起作用,尽管直接分配ID不常见。你有错误信息吗? – zetetic 2010-12-01 05:05:42
用户ID = 5是否存在? – hade 2010-12-01 08:35:50