o.errors.allErrors.each {println it} per impostazione predefinita quando non si riesce a salvare un oggetto dominio

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

Domanda

Quando persisto oggetti di dominio usando Grails / GORM, mi trovo spesso a chiedermi perché una chiamata save () fallisca.

Questo può essere facilmente risolto aggiungendo la logica:

if (!o.save()) {
    o.errors.allErrors.each { println it }
}

Tuttavia, aggiungendo questo ovunque faccio un .save () aggiunge un sacco di codice duplicato. Nello spirito di DRY vorrei configurare Grails / GORM per stampare automaticamente eventuali errori di salvataggio sulla console (stderr). È possibile? In caso contrario, come posso estendere GORM per renderlo possibile?

È stato utile?

Soluzione

Soluzione:

Object.metaClass.s = {
    def o = delegate.save()
    if (!o) {
        delegate.errors.allErrors.each {
            println it
        }
    }
    o
}

Questo aggiunge un metodo chiamato s () che chiamerà save () e stamperà eventuali errori.

Altri suggerimenti

Questo non è l'aspetto più pulito e probabilmente esiste un modo migliore , groovier per farlo. Basandomi sulla ricerca qui ho messo insieme questo codice che potrebbe essere qualcosa che potresti espandere e usare:

class Book {
   void printTitle(){ println "The Title" }
}

Book.metaClass.customPrintTitle << {-> 
    println "changin ur class"
    printTitle()
}

def b = new Book()

b.customPrintTitle()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top