我和这个人有几乎相同的问题:http://www.ruby-forum.com/topic/197440。ActiveRecord touch(:列)总是也会更新:updated_at
我试图触摸一列(:touched_at
)而没有自动更新:updated_at
,但看着SQL查询,它总是更新到当前时间。
我认为这可能与我使用它的特定模型有关,所以我尝试了几个不同的结果。
有谁知道什么可能导致它总是设置:updated_at
时触摸不同的列? touch
内部使用write_attribute
,所以它不应该这样做。
编辑:
一些澄清...了Rails 2.3.5文档的touch
状态,“如果一个属性名被传递,该属性用于触摸代替的updated_at /上属性。 “但我的行为并非如此。也许这是一个文档偏离代码的实际状态的情况?
这似乎是唯一的方法。看起来Rails 2.3.5文档是错误的。我想添加回答,我可以在模型的回调中加入'touch!'方法来完成对ActiveRecord'belongs_to''s':touch =>:column'的功能的复制(我认为它使用'before_save '和'before_destroy',但我必须检查源代码)。 – tfe 2010-09-23 18:50:36
'.update_all({:touched_at => Time.now.utc},{:id => self.id})'已被弃用,以支持'self.class.where(id:self.id).update_all touched_at:Time.now.utc)' – astephenb 2014-11-19 21:34:44