after_create
、after_save
、およびafter_commit
の違いは、Rails)です。
after_save
は、オブジェクトが作成および更新されるときに呼び出されますafter_commit
は、作成、更新、および破棄時に呼び出されます。after_create
は、オブジェクトの作成時にのみ呼び出されますこれがそれらの間の唯一の違いですか、または他の大きな違いはありますか?
あなたはほとんどそれを正しかった。ただし、after_commit
とafter_create
またはafter_save
には大きな違いが1つあります。
after_create
の場合、これは常に保存(または作成)の呼び出しが戻る前になります。
Railsはトランザクション内のすべての保存をラップし、そのトランザクション内でbefore/after createコールバックを実行します(これにより、after_createで例外が発生した場合、保存がロールバックされます)。 after_commit
を使用すると、コードは最も外側のトランザクションがコミットされるまで実行されません。これは、トランザクションRails createdまたはあなたが作成したものです(たとえば、1つのトランザクション内で複数の変更を行いたい場合)。最初に投稿された here
また、つまり、after_commit
が例外を発生させた場合、トランザクションはロールバックされません。
コールバックの順序付き
after_create-
Model.saveの後に、まだ保存されていない(レコードが存在しない)新しいオブジェクトで呼び出されます
after_save-
Model.saveの後に呼び出されます(作成または更新の保存に関係なく)
after_commit-
データベーストランザクションが完了した後に呼び出されます。