我遇到了和这个人差不多的问题:http://www.ruby-forum.com/topic/197440 .
我正在尝试触摸一列 (:touched_at
) 而不让它自动更新 :updated_at
,但是观察 SQL 查询,它总是更新到当前时间。
我认为这可能与我使用它的特定模型有关,所以我尝试了几个不同的模型,结果相同。
有谁知道是什么原因导致它在触摸不同的列时总是设置 :updated_at
? touch
在内部使用 write_attribute
,所以它不应该这样做。
编辑:
一些澄清...... touch
的 Rails 2.3.5 文档声明“如果传递了属性名称,则该属性用于触摸而不是 updated_at/on 属性。”但我的不是这样。也许是文档偏离了代码的实际状态?
最佳答案
您非常想编写自定义 SQL:
def touch!
self.class.update_all({:touched_at => Time.now.utc}, {:id => self.id})
end
这将生成以下 SQL:
UPDATE posts SET touched_at = '2010-01-01 00:00:00.0000' WHERE id = 1
这就是你所追求的。如果你调用#save,这最终会调用#create_with_timestamps。或 #update_with_timestamps ,这些是更新 updated_on/updated_at/created_on/created_at 列的内容。
顺便说一下,#touch 的来源说明一切。
关于ruby-on-rails - ActiveRecord 触摸(:column) always also updates :updated_at,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774305/