保存和销毁会自动包装在事务中

#save 和#destroy 都包含在一个事务中,该事务确保你在验证或回调中执行的任何操作都将在其受保护的封面下进行。因此,你可以使用验证来检查事务所依赖的值,或者可以在回调中引发异常以进行回滚,包括 after_*回调。

因此,在操作完成之前,不会在连接之外看到对数据库的更改。例如,如果你尝试在 after_save 中更新搜索引擎的索引,则索引器将不会看到更新的记录。after_commit 回调是提交更新后唯一触发的回调。