Rails: исключение в after_create остановка сохранения
Простой вопрос. У меня есть модель ActiveRecord, которую я хочу выполнить после обработки после записи. Поэтому в модели у меня есть метод queue_for_processing, который помещает задание в мою очередь Resque. Чтобы сделать это после моей успешной записи, я написал следующее в моей модели:
after_create :queue_for_processing
Довольно просто. Я думал, что все работает как ожидалось. ИСКЛЮЧАЕТ, что вчера вечером мой сервер redis опустился, и все пошло не так. Мои ожидания состояли в том, что запись все равно будет сохранена, и я смогу обработать работу позже вручную. Но метод queue_for_processing бросает исключение (ожидаемое поведение) и останавливает запись из сохранения.
Я не понимаю, как работает after_create? Или мое понимание правильное и что-то напуганное?
Спасибо.
Ответы
Ответ 1
Да, обратные вызовы завернуты в транзакцию.
В основном, это приведет к откату:
- вернуть false из
before_save
или аналогичных обратных вызовов
- исключение в
before_save
или аналогичные обратные вызовы
- исключение в
after_save
или аналогичные обратные вызовы (after_create)
Ниже НЕ НЕ вызывать откат:
- возвращает false из
after_save
или аналогичных обратных вызовов
- исключение в
after_commit
Если вы не хотите, чтобы исключение вызывало откат, используйте after_commit