Podría explicar en detalle lo que el :before_save
y :before_create
Ruby on Rails devoluciones de llamada son, y lo que tienen que ver con las validaciones Rails? ¿La validación ocurre después :before_save
o :before_create
?
Podría explicar en detalle lo que el :before_save
y :before_create
Ruby on Rails devoluciones de llamada son, y lo que tienen que ver con las validaciones Rails? ¿La validación ocurre después :before_save
o :before_create
?
Respuestas:
En una operación de creación en Rails, hay seis devoluciones de llamada 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
after_create
after_save
Las operaciones de actualización tienen exactamente el mismo conjunto, excepto leer en update
lugar de en create
todas partes (y ACTUALIZAR en lugar de INSERTAR ).
A partir de esto, puede ver que la validación se realiza antes de las devoluciones de llamada before_save
y before_create
.
El before_save
ocurre un poco antes del before_create
. Que yo sepa, no pasa nada entre ellos; pero before_save
también se activará en las operaciones de Actualización, mientras before_create
que solo se activará en Creates.
after_save
o after_create
?
after_save
o after_create
, self
es el registro que se acaba de guardar, tal como existe después de guardar. Que incluye campos como autogenerados id
, created_at
, updated_at
.
before_create
refiere a un nuevo objeto que se guarda en la base de datos, no al create
método real al que se llama. Por lo tanto, before_create
todavía se puede disparar incluso desde el save
método.
before_save
3ro y before_create
5to.
before_save
se llama cada vez que se guarda un objeto. Entonces para objetos nuevos y existentes. (crear y actualizar acción)
before_create
solo antes de la creación. Tan solo para objetos nuevos (crear acción)
before_create
vs before_save :on => :create
A veces hay que tener cuidado con el orden de las devoluciones de llamada
Ver aquí para más detalles:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create
no funciona (al menos en los carriles 3,2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
yafter_validation_on_create
se eliminan a partir de Rails 3 , en su lugar usebefore_validation
yafter_validation
respectivamente con la opción:on => :create
.