¿Se ha llamado al enganche after_validation
en todo momento, incluso cuando la validación falla? ¡Probé un par de pruebas y parece que sí!¿Se ha llamado al hook after_validation cada vez en Active Record?
Respuesta
Está en lo cierto, la falla de validación aún desencadena la devolución de llamada posterior a la validación. Este es el orden de las devoluciones de llamada:
- before_validation
- after_validation
- before_save
- before_create
- after_create
- after_save
- after_commit
También, para comprender la cadena de eventos más grande: la documentación dice que una devolución de llamada "anterior" que devuelve falso detendrá la cadena y detendrá la acción (guardar, crear, actualizar, etc.). Una devolución de llamada "después" que devuelve falso detendrá la cadena de devoluciones de llamadas, pero no toda la acción.
"after_validation" es lo último que se ejecuta si las validaciones fallan y todo se detiene allí. Sin embargo, si pasan, todo lo demás se envuelve en una transacción de base de datos y se retrotrae si algo sale mal. Por lo tanto, su "antes_crear" puede crear un objeto hijo, por ejemplo, y se deshará con seguridad si falla la creación del objeto.
- 1. ¿Por qué se ha llamado al destructor una sola vez?
- 2. ¿Se ha calculado [hash NSString] cada vez?
- 3. codeigniter active record where, or_where?
- 4. attr_accessible in rails Active Record
- 5. Cómo desactivar auto_increment en Rails Active Record
- 6. Rails Active Record translation: Auto capitalize/downcase?
- 7. onLocationChanged no se ha llamado
- 8. Ruby on Rails Active Record Attribute Introspection
- 9. CodeIgniter - Active Record - sql - complejo unen
- 10. Obteniendo código SQL actual CodeIgniter Active Record
- 11. Diferencia entre Active Record y DAO?
- 12. Interceptor RestEASY No se ha llamado
- 13. El método RandomNumber devuelve el mismo número cada vez llamado
- 14. Rieles: error constante no inicializado en Active Record destroy
- 15. invitadaHandler nunca ha llamado
- 16. Actualización con el límite 1 en codeigniter use active record
- 17. Rails Active Record seleccione padre e hijo como un resultado
- 18. averiguar si una función se ha llamado
- 19. No se ha llamado a Page_PreInit?
- 20. ¿Cómo implementar la herencia Active Record en Ruby on Rails?
- 21. cómo usar IN & Between Clause en YII ACtive Record?
- 22. No se ha llamado al gancho del teclado de nivel bajo en la aplicación .NET
- 23. fin Active Record por el tamaño del grupo
- 24. ¿Es seguro llamar al método ContinueWith en TaskCompletionSource.Task (al que se le ha llamado a .SetResult)?
- 25. my_object.save (falso) no omite REALMENTE mis validaciones de Active Record
- 26. ¿Hay algún evento que se active cada vez que haya una excepción?
- 27. Rails Active Record find (: all,: order =>) issue
- 28. Active Record has_many genera sql con clave foránea IS NULL
- 29. Data Mapper es una tendencia más moderna que Active Record
- 30. ¿Hay un archivo de traducción inglés predeterminado para Active Record?
¡Gracias! Tu lo has clavado. Entonces, si la after_validation devuelve false, ¿revertirá la transacción? – rafamvc
¡De nada! Si after_validation devuelve false, detendrá cualquier devolución anterior/posterior, pero no detendrá la transacción. Probablemente esto se deba a que las devoluciones de llamada "anteriores" están destinadas a detectar posibles problemas, "después de" las devoluciones de llamada tienen como objetivo hacer las tareas secundarias que se deben realizar después de que un paso se haya completado con éxito. Por ejemplo, puede usar before_validation para establecer el valor predeterminado para un atributo, y si eso falla, desea detener todo el proceso. Y puede usar after_validation para actualizar un contador "failed_create" si hay algún error. –
@rafamvc, si esta es la respuesta correcta, ¿por qué aceptaste la otra? – Mischa