rails create callbacks before_delete before after_save after active ruby-on-rails ruby activerecord callback

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.