儲存和銷燬會自動包裝在事務中

#save 和#destroy 都包含在一個事務中,該事務確保你在驗證或回撥中執行的任何操作都將在其受保護的封面下進行。因此,你可以使用驗證來檢查事務所依賴的值,或者可以在回撥中引發異常以進行回滾,包括 after_*回撥。

因此,在操作完成之前,不會在連線之外看到對資料庫的更改。例如,如果你嘗試在 after_save 中更新搜尋引擎的索引,則索引器將不會看到更新的記錄。after_commit 回撥是提交更新後唯一觸發的回撥。