问题 获取after_update回调的更改属性


我正在尝试进行有条件的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

记录器打印空哈希: {} 

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

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


1313
2018-04-06 16:40


起源



答案:


你想用 changes 不 previous_changes。您仍在同一个保存交易中,因此您正在寻找的是 changes。该 previous_changes 在更新完成之前,将不会获得该信息。

RAILS 5.1.1:
使用 saved_changes 代替 changes 因为它将在新版本中弃用。


16
2018-04-06 16:50



很酷的东西!但是,当它到达时,不应该完成更新 after_update 回电话? - kiddorails
在完整回调链完成之前,不会将更新视为“完成”。请参见 api.rubyonrails.org/classes/ActiveRecord/Callbacks.html 详情。 - Alex Peachey


答案:


你想用 changes 不 previous_changes。您仍在同一个保存交易中,因此您正在寻找的是 changes。该 previous_changes 在更新完成之前,将不会获得该信息。

RAILS 5.1.1:
使用 saved_changes 代替 changes 因为它将在新版本中弃用。


16
2018-04-06 16:50



很酷的东西!但是,当它到达时,不应该完成更新 after_update 回电话? - kiddorails
在完整回调链完成之前,不会将更新视为“完成”。请参见 api.rubyonrails.org/classes/ActiveRecord/Callbacks.html 详情。 - Alex Peachey