2009-09-24 61 views
0

我有一張表,用於傾銷一些交易數據。Rails:在不觸發before_save的情況下添加數據

我有一個交易模型。 其中有一個before_save,我通過credit_card網關處理交易,並使用結果填寫交易模型中的其餘字段。

我有一個Transaction Observer觀看它發出一個通知,當它看到一個新的交易。然後它嘗試使用update_attribute在TRANSACTION中保存該嘗試的結果。

這並不令人驚訝,因爲觀察者正在觸發before_save並在我們周圍前進,導致無限循環。

有沒有辦法更新事務記錄中的一個或兩個屬性而不觸發before_save回調?我唯一的解決方案是將通知結果移到另一個表中嗎?

回答

2

有一個私人ActiveRecord的方法,您可以使用:

update_without_callbacks 

,因爲它是私有的,你需要使用送

transaction.send(:update_without_callbacks) 
+0

驚人!我不確定這是否是一個很好的主意,但它確實可以在這裏使用。謝謝! – mikewilliamson 2009-09-25 02:40:29

+1

這是可能用於在控制檯上捏的東西,但我不知道在代碼中使用它是否好主意。 – nitecoder 2009-09-25 03:12:44

+0

呃,不再工作了。值得一擊雖然:-) – 2014-12-04 23:19:34

1

快速和未經測試,但我使用的基本方法是允許在回調條件。條件可以是任何你想要的。

class ModelWithCallback < ActiveRecord::Base 

    before_save :update_stuff, :if => :update_needed? 

    private 
    def update_stuff 
     ## Your callback code 
    end 

    def update_needed? 
     !(changed.any?{ |field| field == "name" || field == "address") 
    end 
end 
相關問題