ActiveRecord touch(:column)也总是更新:updated_at

tfe*_*tfe 3 activerecord ruby-on-rails

我和这个家伙有很多相同的问题:http://www.ruby-forum.com/topic/197440.

我试图触摸一个列(:touched_at)而不进行自动更新:updated_at,但是观察SQL查询时,它总是更新到当前时间.

我认为它可能与我使用它的特定模型有关,所以我尝试了几个不同的具有相同结果的模型.

有人知道:updated_at在触摸不同的列时可能会导致它始终设置的原因吗?touch在write_attribute内部使用,所以它不应该这样做.

编辑:

一些澄清...... Rails 2.3.5文档touch说明"如果传递属性名称,该属性用于触摸而不是updated_at/on属性." 但我的行为并非如此.也许这是一个文件偏离代码实际状态的情况?

Fra*_*eil 8

你非常想写自定义SQL:

def touch!
  self.class.update_all({:touched_at => Time.now.utc}, {:id => self.id})
end
Run Code Online (Sandbox Code Playgroud)

这将生成此SQL:

UPDATE posts SET touched_at = '2010-01-01 00:00:00.0000' WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

这就是你所追求的.如果调用#save,这将最终调用#create_with_timestamps或#update_with_timestamps,这些是更新updated_on/updated_at/created_on/created_at列的内容.

顺便说一下,#touch的来源说明了一切.