after_commit实际上运行了吗?

时间:2011-06-10 16:17:40

标签: ruby-on-rails ruby activerecord

我在rails 3.0.8上尝试使用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

任何想法为什么它不起作用?我假设我正确使用它。

2 个答案:

答案 0 :(得分:5)

如果您在测试套件中尝试此操作,则必须为该课程设置self.use_transactional_fixtures = false。默认情况下,Rails在事务中执行测试套件并在最后执行回滚以进行清理。它使您的测试变得快速,但如果您依赖于自己控制事务或此回调,它就不起作用。

答案 1 :(得分:3)

您现在可以使用test_after_commit gem 自述文件说

  

“在使用transactional_fixtures = true的Rails 3+测试中激活after_commit回调。”

https://github.com/grosser/test_after_commit