after_update if语句基于属性值Ruby on Rails

时间:2018-06-05 21:26:48

标签: ruby-on-rails activerecord

我正在尝试根据项目的状态发送通知,但无法完全理解逻辑 - 我的代码在更新后运行:create_slack_notify_job,但我希望:create_slack_notify_job仅在运行之后运行特定类型的更新(当项目的状态更改为“活动”时),而不是在任何属性更新之后。我的after_update位于下方 - 有关如何按照说明进行操作的任何想法?

after_update :create_slack_notify_job, if: Proc.new{|project|project.status_changed? && project.status == 'Active' }

1 个答案:

答案 0 :(得分:1)

如果你正在运行Rails 5.1+,你会想要使用方法saved_changes和朋友。特别是,您可能需要project.saved_change_to_attribute? :status, to: 'Active'

http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Dirty.html#method-i-saved_change_to_attribute-3F

https://github.com/rails/rails/pull/19847