コピペコードで快適生活

明日使えるソースを自分のために

ActiveRecordのafter_commitが発火するとき発火しないとき

発火する

・なにも変更せずにsaveしても発火する(select文しかないtransactionでcommitがされるため)
・destroyで発火する。self.destroyed?はtrue, self.reloadでActiveRecord::RecordNotFound
・soft_destroyでも発火する。self.soft_destroyed?はtrue (kakurenbo-puti使用時)
・他のafter_commitがこけても発火する。

発火しない

・update_columnでは発火しない(トランザクションはっていないからcommitもない)
・validationエラー時はひっかからない(commitじゃなくてrollbackするので)
・DBエラー(unique制限)でrollbackしたときは発火しない(commitじゃなくてrollbackするので)