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
?
fuente
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
?
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.
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
.after_save
oafter_create
?after_save
oafter_create
,self
es el registro que se acaba de guardar, tal como existe después de guardar. Que incluye campos como autogeneradosid
,created_at
,updated_at
.before_create
refiere a un nuevo objeto que se guarda en la base de datos, no alcreate
método real al que se llama. Por lo tanto,before_create
todavía se puede disparar incluso desde elsave
método.before_save
3ro ybefore_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)fuente
before_create
vsbefore_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/fuente
before_save :on => :create
no funciona (al menos en los carriles 3,2)before_save :generate_api_key, :if => :new_record?