o.errors.allErrors.each {println it} por defecto cuando no se puede guardar un objeto de dominio
-
03-07-2019 - |
Pregunta
Cuando los objetos de dominio persistentes utilizan Grails / GORM, con frecuencia me pregunto por qué falla una llamada save ().
Esto se puede resolver fácilmente agregando la lógica:
if (!o.save()) {
o.errors.allErrors.each { println it }
}
Sin embargo, agregando esto en todas partes hago un .save () agrega mucho código duplicado. En el espíritu de DRY, me gustaría configurar Grails / GORM para imprimir automáticamente los errores guardados en la consola (stderr). ¿Es eso posible? Si no, ¿cómo extiendo GORM para que sea posible?
Solución
Solución:
Object.metaClass.s = {
def o = delegate.save()
if (!o) {
delegate.errors.allErrors.each {
println it
}
}
o
}
Esto agrega un método llamado s () que llamará a save () e imprimirá cualquier error.
Otros consejos
Este no es el aspecto más limpio, y probablemente haya una forma mejor , más genial de hacer esto. Basado en mirar aquí , armé este código que podría ser algo que podría expandir y usar:
class Book {
void printTitle(){ println "The Title" }
}
Book.metaClass.customPrintTitle << {->
println "changin ur class"
printTitle()
}
def b = new Book()
b.customPrintTitle()