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?

Author: Ajedi32, 2011-06-06

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:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    BASE DE DATOS INSÉRTESE
  7. after_create
  8. 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.

 339
Author: Chowlett,
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)

 124
Author: Michael Koper,
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 /

 2
Author: 23inhouse,
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