我还是Ruby on Rails的新手,在我的模型中我经常这样做:
def activate
update_column(:activated, true)
update_column(:activated_at, Time.zone.now)
update_column(:activation_token, nil)
end
如果我这样做会有什么不同?
def activate
self.activated = true
self.activated_at = Time.zone.now
self.activation_token = nil
save!(:validate => false)
end
我仍然不清楚这两种方法之间的区别。从数据库的角度来看哪一个更快或更高效?
答案 0 :(得分:1)
调用后立即调用update_column
,将在数据库上生成并执行查询。所以你最终会得到三个更新查询。
但是当您使用第二种方法更改object
的属性,然后最终调用save
时,将生成并执行单个查询以对{{1}进行所有更改(代表记录)。
因此,就效率而言,你应该总是选择第二个。记住,数据库上的写入或查询次数越少越好!
答案 1 :(得分:1)
更新对象的单个属性,而不调用save。
其中
对于你的情况,第二个选项肯定是更好的选择,是的,你应该删除:validate => false
表单保存以避免任何验证问题。