只有在Rails中的属性发生变化时才运行callback
我在我的应用程序中有以下关联:
# Page belongs_to :status
我希望在page
的status_id
发生变化时运行callback。
所以,如果page.status_id
从4到5,我想能够抓住这一点。
怎么做?
class Page < ActiveRecord::Base before_save :do_something, if: :status_id_changed? private def do_something # ... end end
这利用了before_save
callback可以基于方法调用的返回值有条件地执行的事实。 status_id_changed?
方法来自ActiveModel :: Dirty ,它允许我们通过简单地追加_changed?
来检查一个特定的属性是否已经改变_changed?
到属性名称。
当应该调用do_something
方法时,可以满足您的需求。 它可能是before_save
或after_save
或任何定义的ActiveRecord ::callback 。
尝试这个
after_validation :do_something, if: ->(obj){ obj.status_id.present? and obj.status_id_changed? } def do_something # your code end