Rails特定列的时间戳

时间:2015-08-15 11:37:17

标签: ruby-on-rails activerecord callback

我正在寻找为记录中的多个列添加*_updated_at列的方法。

它的工作方式与普通的Rails时间戳类似,即基于约定。如果有一个名为author_updated_at的数据库列,则只要author属性发生更改,该类就会自动更新它。

写起来并不难,但我想在这里问一下,如果有人之前已经做过,或者那里有一块宝石。我也有兴趣知道这种方法是否存在性能问题,但我认为如果使用before_save则应该可以忽略不计。没有额外的读取或写入。

1 个答案:

答案 0 :(得分:1)

我用不同版本的@max解决方案解决了。

previous_changes没有为我工作。我使用的是Rails 4.2。

module AttributeTimestampable
  extend ActiveSupport::Concern

  included do
    after_save do
      self.changed.each do |attr|
        timestamp = "#{attr}_updated_at"
        update_column(timestamp, updated_at) if self.respond_to? timestamp
      end
    end
  end
end