[英]ruby – Difference between after_create, after_save and after_commit in rails callbacks – Code Utility
[英]Difference between after_create, after_save and after_commit in rails callbacks
Rails 中after_create
、 after_save
和after_commit
的區別在於:
after_save
在創建和更新對象時調用after_commit
在創建、更新和銷毀時被調用。after_create
僅在創建對象時調用這是它們之間唯一的區別,還是還有其他主要區別?
你幾乎猜對了。 但是after_commit
和after_create
或after_save
之間有一個主要區別,即
在after_create
的情況下,這將始終在調用 save(或 create)返回之前。
Rails 將每次保存都包裝在一個事務中,並且在該事務中運行 before/after create 回調(其結果是,如果在 after_create 中引發異常,則保存將回滾)。 使用after_commit
,您的代碼直到最外層事務提交后才會運行。 這可能是創建的事務軌道或由您創建的軌道(例如,如果您想在單個事務中進行多項更改)。 最初發布在這里
這也意味着,如果after_commit
引發異常,則事務將不會回滾。
使用回調順序
after_create -
在 Model.save 之后對尚未保存的新對象調用(不存在記錄)
after_save -
在 Model.save 之后調用(無論是創建還是更新保存)
after_commit -
在數據庫事務完成后調用。
此外,即使僅觸及記錄, after_commit 也會執行。 這可能不是您想要的。 after_save 將不會在觸摸后運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.