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