2016-09-23 29 views
3

紅寶石2.1.8 軌3.2.18Rails的ActiveRecord的條件回調問題

我想運行一個回調時,只有當一個特定的屬性已經改變保存記錄。例如

before_save :do_the_thing, if: :my_attr_changed? 

但是,當我改變my_attr和保存,do_the_thing沒有得到 調用。然而,如果我做同樣的事情,但是:

before_save :do_the_thing 

def do_the_thing 
    puts my_attr_changed? 
end 

它在日誌中輸出「true」。在這裏很困惑。任何幫助讚賞。謝謝。

+2

如果你使用一個lambda,而不是一個符號,會發生什麼? 'before_save:do_the_thing,如果: - > {my_attr_changed? }' – max

+0

雖然在這裏使用符號應該工作。您是否創建了一個複製問題的測試,並且完全確定錯誤不在方法中? – max

+0

符號應該工作 –

回答

4

只是移動它內部的λ

before_save :do_the_thing, if: -> { my_attr_changed? }