2011-06-10 86 views
4

我在軌道3.0.8上,並試圖使用after_commit回調。after_commit實際運行嗎?

它的定義如下:https://github.com/rails/rails/blob/v3.0.8/activerecord/lib/active_record/transactions.rb#L210

它提到這裏的回調之一:https://github.com/rails/rails/blob/v3.0.8/activerecord/lib/active_record/callbacks.rb#L22

考慮一下:

class Car < ActiveRecord::Base 
    after_commit do 
    # this doesn't execute 
    end 

    after_commit :please_run 
    def please_run 
    # nor does this 
    end 
end 

任何想法,爲什麼它不工作?我假設我正確使用它。

回答

5

如果您在測試套件中對此進行了實驗,則必須爲該類設置self.use_transactional_fixtures = false。默認情況下,Rails在事務內部執行一個測試套件,並在結束時執行回滾以進行清理。它使您的測試更快速,但如果您依靠自己控制交易或回調,它不起作用。

+0

謝謝!那正是我正在試驗的地方。我忘記了交易中包裝的測試。 – Austin 2011-06-10 16:35:11

3

您現在可以使用test_after_commit gem。
自述說

「讓after_commit回調火與transactional_fixtures =真正的測試爲Rails 3+」。

https://github.com/grosser/test_after_commit

+0

偉大的寶石,爲我創造奇蹟! – dolzenko 2013-07-24 14:00:39

+0

完美的作品!謝謝。 – Oleander 2014-01-06 18:03:33