after_commit实际上运行了吗?

Aus*_*tin 4 ruby activerecord ruby-on-rails

我在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
Run Code Online (Sandbox Code Playgroud)

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

dun*_*289 5

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