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?
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?
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_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.
after_saveo after_create?
after_saveo after_create, selfes 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_createrefiere a un nuevo objeto que se guarda en la base de datos, no al createmétodo real al que se llama. Por lo tanto, before_createtodavía se puede disparar incluso desde el savemétodo.
before_save3ro y before_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)
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 => :createno funciona (al menos en los carriles 3,2)
before_save :generate_api_key, :if => :new_record?
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.