En este momento, por lo que sé, se llamará a after_validation
incluso si el modelo no supera las validaciones. ¿Hay alguna manera de llamarlo solo si el modelo es válido? Intenté agregar return false unless self.valid?
en el método after_validation
pero eso activa la validación nuevamente y crea un ciclo infinito.Ruby on Rails: ¿validez después de la validez?
Respuesta
Las validaciones fallan añadir a los errores para el registro, por lo que sólo podría comprobar:
return false unless self.errors.empty?
He intentado esto antes y todavía falló. Luego revisé el código y noté que estaba llamando a la validación de nuevo (cuando se suponía que no debía). Ahora funciona perfecto. ¡Gracias! –
¿Ha pensado en utilizar la devolución de llamada before_save en su lugar?
Creo que solo se llamará si el objeto es válido.
¿Qué sucede si no quiero guardarlo? Solo quiero validarlo? –
Tampoco puede hacer cosas más avanzadas en 'before_save' como comprobar qué campos han cambiado en una asociación (mediante' xxx_changed? ') Ya que las asociaciones se actualizan primero, restableciendo así el hash' changed'. Como tal, es necesario realizar estas comprobaciones en 'after_validation' como una solución alternativa. –
Sé que esto es una vieja pregunta, pero me encontré con el mismo error cuando se utiliza una validación personalizada en un modelo Yo había creado. Mirando el docs hay una parte que cubre los métodos personalizados e indica que tales validaciones son llamadas cada vez que el método .valid?
. Esa es probablemente la razón por la cual el ciclo infinito se activó cuando se activó la devolución de llamada :after_validation
.
- 1. validez del código
- 2. std :: string.npos validez
- 3. HTML5 validez de tablas anidadas
- 4. NaN en python y comprobación de validez
- 5. Cualquier validez para el movimiento NoSQL?
- 6. ¿Los iteradores de STL garantizan la validez después de que se cambió la colección?
- 7. Haskell - Comprobación de la validez de un identificador de archivo
- 8. Verificación de la validez del correo electrónico en django/python
- 9. validez del iterador, después de la llamada a erase() en std :: set
- 10. ¿Cómo puedo verificar la validez del archivo .mo?
- 11. Ruby vs. Ruby on Rails
- 12. Ruby on Rails will_paginate
- 13. Docsplit Ruby on Rails
- 14. Ruby on Rails Switch
- 15. Ruby on Rails enviar
- 16. ¿Se modeló CakePHP después de Ruby on Rails?
- 17. Ruby on Rails: descargable
- 18. Usos de Ruby on Rails
- 19. ¿Cómo puedo verificar (analizar) mediante programación la validez de una sentencia de TSQL?
- 20. Ruby on Rails asociación polimórfica
- 21. Busting Ruby on Rails Myths
- 22. Ruby on rails application root
- 23. Ruby on Rails: formulario select
- 24. Ruby on Rails versus Python
- 25. Ruby on Rails redirect_to arguments
- 26. Cómo dominar Ruby on Rails
- 27. Ruby on Rails ActiveRecord: pluralization
- 28. ¿Cómo funciona Ruby on Rails?
- 29. Ruby on Rails I18n interpolation
- 30. Ruby on rails connection problem
Bueno, podrías buscar 'errors', como' return false a menos que self.errors.empty? 'O' return false if errors.any? '. – tbuehlmann