记录 Rails 中记录上属性更改时刻的最佳方式?

Best way to log the time of the moment when an attribute was changed on a record in Rails?

我在 Rails 中使用状态机,我想记录上次更改状态的时间。

完成此任务的最佳方法是什么?谢谢!

首先,我将创建一个属性来存储上次更改状态的时间(假设模型名称 Machine):

rails generate migration AddStateChangedAtToMachines state_changed_at:timestamp
rake db:migrate

然后,如果值已更改(假设属性名称 state),我将添加一个 before_save 回调来设置时间戳:

class Machine < ActiveRecord::Base
  before_save :set_state_changed_at

  private
  set_state_changed_at
    state_changed_at = Time.zone.now if state_changed?
  end
end

state_changed?ActiveRecord::Dirty 定义。如果对象的属性 statestate 的数据库值不同,则 returns 为真。否则它 returns false。该模块定义了多种实例方法,用于跟踪对象状态与它所代表的数据库记录状态之间的差异,即对象自上次 saved.

以来发生了什么变化