说我必须在文章模型中更新'author_id'。来自属于app/model/article.rb
我应该选择哪一个?为什么?
self.update_attribute(:author_id, id)
或
self.author_id = id
self.save
如果还有更好的方法,请提出建议!
答案 0 :(得分:4)
主要区别在于update_attribute
不会触发验证。你应该明确地选择第二个选项(除非你真的想跳过验证)。您可以使用update_attributes
在一行中书写(最后注释):
self.update_attributes(author_id: id)
还有另一种值得了解的方法叫update_column(s)
。这些方法将跳过所有回调和验证,并且只保存数据库中的特定列,其余的保持不变(所有其他方法保存所有列):
self.id #=> 1
self.id = 5
self.update_column(:name, 'hello')
self.id #=> 5
self.id_changed? #=> true!
答案 1 :(得分:1)
这取决于。如果您希望运行验证,则应采用第二种方式(使用save
):
self.author_id = id
save
您也可以使用update
:
update(author_id: id)
如果您不需要它们,可以使用update_attribute
(因为update_attribute
未运行验证):
update_attribute(:author_id, id)