我有一个带有状态列的ActiveRecord模型.当模型以状态更改保存时,我需要写入历史文件,更改状态以及由谁负责更改.我认为after_save回调会很好用,但我不能使用status_changed?用于确定执行历史写入的动态方法.如果模型已保存但状态未更改,我不想写入历史记录.我现在处理它的唯一想法是使用实例变量标志来确定after_save是否应该执行.有任何想法吗?
自问题发布以来,这可能已经发生了变化,但是after_save回调应该具有*_changed?
可用的动态方法并正确设置:
class Order after_save :handle_status_changed, :if => :status_changed? end
要么
class Order after_save :handle_status_changed def handle_status_changed return unless status_changed? ... end end
适用于我的Rails 2.3.2.
before_save
改为使用回调.然后,您可以访问新旧状态值.回调包含在事务中,因此如果保存失败或被另一个回调取消,则历史写入也将回滚.