2010-12-01 57 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) 

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

彼得