在after_update回调中获取更改的属性

Dan*_*npe 11 ruby activerecord ruby-on-rails

我正在尝试创建一个有条件的after_update,我有以下内容:

  after_update do |participant|
    Rails.logger.info "#{self.previous_changes} changed."
    if self.previous_changes.include?(:current_distance)
      #Do my stuff ...
    end
  end
Run Code Online (Sandbox Code Playgroud)

记录器打印空哈希: {}

如何检查哪个属性已更改?

我正在使用:participant.update_attribute(:current_distance, distance)更新属性.

Ale*_*hey 18

你想用changes没有previous_changes.您仍在同一个保存交易中,因此您正在寻找的是changes.该previous_changes不会有信息,直到更新完成之后.

RAILS 5.1.1:
使用saved_changes而不是changes在新版本中弃用.

  • 否,在完整的回调链完成之前,更新不会被视为“完成”。有关详细信息,请参阅 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html。 (2认同)