rails initialize has_many guides create belong before after_save after active ruby-on-rails activerecord resque after-create

ruby-on-rails - initialize - rails models



Rails: Excepción en after_create deteniendo guardar (1)

Pregunta simple. Tengo un modelo ActiveRecord en el que quiero realizar el procesamiento posterior DESPUÉS de que se guarde el registro. Así que en el modelo tengo un método queue_for_processing que pega un trabajo en mi cola de Resque. Para que esto se ejecute después de que mi registro se haya conservado correctamente, he escrito lo siguiente en mi modelo:

after_create :queue_for_processing

Bastante simple. Pensé que todo estaba funcionando como se esperaba, EXCEPTO que anoche, mi servidor redis falló y las cosas salieron mal. Mis expectativas eran que el registro aún se guardaría y que luego podría procesar el trabajo manualmente. Pero el método queue_for_processing está lanzando una excepción (comportamiento esperado) e impidiendo que el registro se guarde.

¿Estoy entendiendo mal cómo funciona after_create? ¿O es correcto mi comprensión y algo funky está sucediendo?

Gracias.


Sí, todas las devoluciones de llamada están envueltas en una transacción.

Básicamente, lo siguiente causará un retroceso:

  • devuelve falso desde before_save o devoluciones de llamada similares
  • excepción en before_save o devoluciones de llamada similares
  • excepción en after_save o devoluciones de llamada similares (after_create)

Lo siguiente NO causa una reversión:

  • devuelve falso desde after_save o devoluciones de llamada similares
  • excepción en after_commit

Si no desea que una excepción cause un retroceso, use after_commit