o.errors.allErrors.each {println it} por defecto cuando no se puede guardar un objeto de dominio

StackOverflow https://stackoverflow.com/questions/611282

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?

¿Fue útil?

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top