After_commit действительно работает? - PullRequest
4 голосов
/ 10 июня 2011

Я на рельсах 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 ]

5 голосов
/ 10 июня 2011

Если вы экспериментируете с этим в своем наборе тестов, вам придется установить self.use_transactional_fixtures = false для этого класса.По умолчанию Rails выполняет тестовый набор внутри транзакции и в конце выполняет откат для очистки.Это делает ваши тесты быстрыми, но если вы полагаетесь на контроль транзакций самостоятельно или этот обратный вызов, это не сработает.

3 голосов
/ 20 июня 2013

Теперь вы можете использовать gem test_after_commit.
В файле readme написано

«Запустить обратные вызовы after_commit в тестах для Rails 3+ с транзакцией» - true.1007 *https://github.com/grosser/test_after_commit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...