Ruby on Rails Callback, ¿cuál es la diferencia entre:before save y: before create?
¿Podría explicar en detalle qué son los callbacks :before_save
y :before_create
Ruby on Rails, y qué tienen que ver con las validaciones de Rails? ¿La validación ocurre después de :before_save
o :before_create
?
3 answers
En una operación create bajo Rails, hay seis callbacks antes de la operación de la base de datos, y dos después. En orden, estos son:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
-
before_create
BASE DE DATOS INSÉRTESE after_create
after_save
Las operaciones de actualización tienen exactamente el mismo conjunto, excepto read update
en lugar de create
everywhere (y UPDATE en lugar de INSÉRTESE).
A partir de esto, puede ver que la validación se lleva a cabo antes de las devoluciones de llamada before_save
y before_create
.
El before_save
ocurre ligeramente antes del before_create
. Hasta donde yo sé, no pasa nada entre ellos; pero before_save
también disparará en las operaciones de Actualización, mientras que before_create
solo disparará en Creates.
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-02-16 05:37:32
before_save
se llama cada vez que se guarda un objeto. Así que para objetos nuevos y existentes. (crear y actualizar acción)
before_create
solo antes de la creación. Así que solo para objetos nuevos (crear acción)
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
2013-01-21 01:00:57
before_create
vs before_save :on => :create
A veces hay que tener cuidado con el orden de las devoluciones de llamada
Vea aquí para más detalles:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc /
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
2018-02-06 11:03:16