同一模型的最佳实践是什么:update_attributes或self.save

时间:2014-05-21 07:50:28

标签: ruby-on-rails ruby model

说我必须在文章模型中更新'author_id'。来自属于app/model/article.rb

的方法

我应该选择哪一个?为什么?

self.update_attribute(:author_id, id)

self.author_id = id
self.save

如果还有更好的方法,请提出建议!

2 个答案:

答案 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)
相关问题