2014-06-19 26 views

回答

77
class Page < ActiveRecord::Base 
    before_save :do_something, if: :status_id_changed? 

private 

    def do_something 
    # ... 
    end 
end 

這利用的事實before_save回調可以基於一個方法調用的返回值有條件地執行。 status_id_changed?方法來自ActiveModel::Dirty,它允許我們通過簡單地將_changed?附加到屬性名稱來檢查特定屬性是否已更改。

do_something方法應該被調用是符合您的需求的。它可以是before_saveafter_savethe defined ActiveRecord::Callbacks中的任何一個。

+0

是否''_changed爲Rails 4和高達仍然有效? – Breno

+2

@Breno是的。 http://api.rubyonrails.org/classes/ActiveModel/Dirty.html – pdobb

+1

此解決方案在較新版本中已棄用。 –

相關問題