¿Cuál es la diferencia entre " después de crear` y `después de guardar` y cuándo utilizar?


Son after_create y after_save lo mismo que por funcionalidad?

Quiero hacer una operación con el correo electrónico de un usuario después de la creación de su cuenta.

Quiero hacer esa operación cuando se guarde en la base de datos.

Que es preferible usar: after_create o after_save?

Author: Arslan Ali, 2011-06-21

3 answers

after_create solo funciona una vez, justo después de crear el registro por primera vez.

after_save funciona cada vez que guardas el objeto, incluso si lo estás actualizando muchos años después

Entonces, si desea hacer esta operación de correo electrónico solo una vez (y luego nunca más), use after_create.

Si quieres hacerlo cada vez que se guarda el objeto, hazlo en after_save

 198
Author: Taryn East,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-18 00:10:56

De los documentos :

after_create()

Se llama después Base.save en objetos nuevos que no lo han hecho se ha guardado todavía (no existe registro).

after_save()

Se llama después de Base.save (independientemente de si es un crear o actualizar guardar).

 91
Author: Michael Kohl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-24 17:33:45
after_save()

Funciona bien cuando tiene que guardar modelos que no guardan muy a menudo. Para este ejemplo particular de cambio de registros con frecuencia sería aconsejable utilizar

 after_commit()

Asegúrese de que el modelo se guarda en la base de datos antes de ejecutar la acción after_commit: calculate_credit_score

def calculate_credit_score
     #Call a Cron job
end
 1
Author: Emma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-22 08:05:03