2015-11-24 3 views
8

Разницы между которыми after_create, after_save и after_commit в рельсе является то, что:Разницы между after_create, after_save и after_commit в рельсах обратных вызовов

  • after_save вызывается, когда объект создается и обновляется, тогда -
  • after_commit пожаров на создавать, обновлять и уничтожать.
  • Хотя after_create только при создании объекта

Это единственное различие между ними или есть другие существенные различия?

+0

Это не дублирует, где находится after_commit в этом вопросе? –

ответ

19

Вы почти правильно поняли. Однако есть одно существенное различие между after_commit и after_create или after_save т.е.

В случае after_create, это всегда будет перед вызовом, чтобы сохранить (или создать) возвращается.

Rails обертывает каждую транзакцию с сохранением внутри транзакции, а в этой транзакции запускаются обратные вызовы до/после (следствие этого - если в post_create возникает исключение, то сохранение будет отменено). С after_commit ваш код не запускается до тех пор, пока не будет совершена самая удаленная транзакция. Это могут быть созданные рельсы транзакций или созданные вами (например, если вы хотите внести несколько изменений внутри одной транзакции). Первоначально опубликовано here

Это также означает, что если after_commit вызывает исключение, транзакция не будет откатна.

+0

В случае after_create это всегда будет перед вызовом сохранения (или создания) возврата. Я не могу понять это утверждение. Может ли кто-нибудь описать другими словами? –

Смежные вопросы