Podría explicar en detalle lo que el :before_savey :before_createRuby on Rails devoluciones de llamada son, y lo que tienen que ver con las validaciones Rails? ¿La validación ocurre después :before_saveo :before_create?
fuente
Podría explicar en detalle lo que el :before_savey :before_createRuby on Rails devoluciones de llamada son, y lo que tienen que ver con las validaciones Rails? ¿La validación ocurre después :before_saveo :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_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_saveLas operaciones de actualización tienen exactamente el mismo conjunto, excepto leer en updatelugar de en createtodas 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_savey before_create.
El before_saveocurre un poco antes del before_create. Que yo sepa, no pasa nada entre ellos; pero before_savetambién se activará en las operaciones de Actualización, mientras before_createque solo se activará en Creates.
before_validation_on_createyafter_validation_on_createse eliminan a partir de Rails 3 , en su lugar usebefore_validationyafter_validationrespectivamente con la opción:on => :create.after_saveoafter_create?after_saveoafter_create,selfes el registro que se acaba de guardar, tal como existe después de guardar. Que incluye campos como autogeneradosid,created_at,updated_at.before_createrefiere a un nuevo objeto que se guarda en la base de datos, no alcreatemétodo real al que se llama. Por lo tanto,before_createtodavía se puede disparar incluso desde elsavemétodo.before_save3ro ybefore_create5to.before_savese llama cada vez que se guarda un objeto. Entonces para objetos nuevos y existentes. (crear y actualizar acción)before_createsolo antes de la creación. Tan solo para objetos nuevos (crear acción)fuente
before_createvsbefore_save :on => :createA 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 => :createno funciona (al menos en los carriles 3,2)before_save :generate_api_key, :if => :new_record?