更新列而不更改updated_at

时间:2015-05-21 14:20:42

标签: ruby-on-rails

这可能听起来像是一个奇怪的请求,但是,我使用的是印象派,并使用缓存的命中列。我每次获得点击时也会更新另一列,这是一个单独的计算。

我现在不想更新updated_at,有没有办法跳过它?

if impressionist(@topic, "message...", :unique => [:session_hash])
  @topic.increment(:exp, 1).save
end

由于

3 个答案:

答案 0 :(得分:7)

来自ActiveRecord::Persistence的{​​{3}}方法可以满足您的需求。

答案 1 :(得分:6)

除了禁用整个类的时间戳(不是线程安全的)之外,您还可以禁用单个实例的时间戳:

@topic.record_timestamps = false
@topic.increment(:exp, 1).save

在为其重新启用时间戳之前,此实例不会创建或更新时间戳。这仅影响此特定实例,其他实例(即使它们引用数据库中的同一行)也不受影响。

答案 2 :(得分:4)

只需在record_timestamps之前停用increment

ActiveRecord::Base.record_timestamps = false

@topic.increment(:exp, 1).save

ActiveRecord::Base.record_timestamps = true

Is there a way to avoid automatically updating Rails timestamp fields?

线程安全版本:update dataset without updating magic timestamp columns