ruby-on-rails - create - rails callbacks
Diferencia entre after_create, after_save y after_commit en callbacks de rieles (2)
La diferencia entre after_create
, after_save
y after_commit
en Rails es que:
-
after_save
se invoca cuando se crea y actualiza un objeto - Se llama a
after_commit
en crear, actualizar y destruir. -
after_create
solo se llama cuando se crea un objeto
¿Es esta la única diferencia entre ellos o hay otras diferencias importantes?
Casi lo entiendes bien. Sin embargo, hay una diferencia importante entre after_commit
y after_create
o after_save
es decir
En el caso de after_create
, esto siempre será antes de que se after_create
la llamada para guardar (o crear).
Rails ajusta cada guardado dentro de una transacción y las devoluciones de llamada de creación antes / después se ejecutan dentro de esa transacción (una consecuencia de esto es que si se produce una excepción en un after_create, el guardado se deshará). Con after_commit
, su código no se ejecuta hasta después de que se after_commit
la transacción más externa. Estos podrían ser los carriles de transacción creados o uno creado por usted (por ejemplo, si desea realizar varios cambios dentro de una sola transacción). Publicado originalmente here
Eso también significa que si after_commit
genera una excepción, entonces la transacción no se retrotraerá.
Con orden de devoluciones de llamada
after_create -
Se llama después de Modal.save en nuevos objetos que aún no se han guardado (no existe ningún registro)
después de guardar
Se llama después de Modal.save (independientemente de si se trata de crear o actualizar guardar)
after_commit -
Se llama después de que se complete la transacción de la base de datos.