gpt4 book ai didi

ruby-on-rails - ActiveRecord 触摸(:column) always also updates :updated_at

转载 作者:行者123 更新时间:2023-12-05 01:19:05 25 4
gpt4 key购买 nike

我遇到了和这个人差不多的问题:http://www.ruby-forum.com/topic/197440 .

我正在尝试触摸一列 (:touched_at) 而不让它自动更新 :updated_at,但是观察 SQL 查询,它总是更新到当前时间。

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

有谁知道是什么原因导致它在触摸不同的列时总是设置 :updated_attouch 在内部使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com