记录 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 定义。如果对象的属性 state
与 state
的数据库值不同,则 returns 为真。否则它 returns false。该模块定义了多种实例方法,用于跟踪对象状态与它所代表的数据库记录状态之间的差异,即对象自上次 save
d.
以来发生了什么变化
我在 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 定义。如果对象的属性 state
与 state
的数据库值不同,则 returns 为真。否则它 returns false。该模块定义了多种实例方法,用于跟踪对象状态与它所代表的数据库记录状态之间的差异,即对象自上次 save
d.