Подтвердить что ты не робот

Rails: исключение в after_create остановка сохранения

Простой вопрос. У меня есть модель ActiveRecord, которую я хочу выполнить после обработки после записи. Поэтому в модели у меня есть метод queue_for_processing, который помещает задание в мою очередь Resque. Чтобы сделать это после моей успешной записи, я написал следующее в моей модели:

after_create :queue_for_processing

Довольно просто. Я думал, что все работает как ожидалось. ИСКЛЮЧАЕТ, что вчера вечером мой сервер redis опустился, и все пошло не так. Мои ожидания состояли в том, что запись все равно будет сохранена, и я смогу обработать работу позже вручную. Но метод queue_for_processing бросает исключение (ожидаемое поведение) и останавливает запись из сохранения.

Я не понимаю, как работает after_create? Или мое понимание правильное и что-то напуганное?

Спасибо.

4b9b3361

Ответ 1

Да, обратные вызовы завернуты в транзакцию.

В основном, это приведет к откату:

  • вернуть false из before_save или аналогичных обратных вызовов
  • исключение в before_save или аналогичные обратные вызовы
  • исключение в after_save или аналогичные обратные вызовы (after_create)

Ниже НЕ НЕ вызывать откат:

  • возвращает false из after_save или аналогичных обратных вызовов
  • исключение в after_commit

Если вы не хотите, чтобы исключение вызывало откат, используйте after_commit