o.errors.allErrors.each {println es} standardmäßig, wenn andernfalls eine Domain-Objekt speichern
-
03-07-2019 - |
Frage
Wenn Domänenobjekte persistierenden mit Grails / GORM ich mich oft fragen, warum ein () speichern Aufruf fehlschlägt.
Dies kann leicht durch Hinzufügen der Logik gelöst werden:
if (!o.save()) {
o.errors.allErrors.each { println it }
}
Dies ist jedoch das Hinzufügen überall kann ich ein .save () fügt eine Menge von doppeltem Code. Im Geiste der DRY würde Ich mag Grails / GORM konfigurieren, um automatisch alle an der Konsole (stderr) save-Fehler zu drucken. Ist das möglich? Wenn nicht, wie erweitere ich GORM es möglich zu machen?
Lösung
Lösung:
Object.metaClass.s = {
def o = delegate.save()
if (!o) {
delegate.errors.allErrors.each {
println it
}
}
o
}
Das fügt eine Methode namens s (), die rufen Sie sparen () und alle Fehler drucken.
Andere Tipps
Dies ist nicht das sauberste suchen, und es ist wahrscheinlich eine besser groovier Weg, dies zu tun. Basierend auf der Suche hier ich diesen Code zusammen, die etwas sein könnte, Sie erweitern und die Nutzung könnten:
class Book {
void printTitle(){ println "The Title" }
}
Book.metaClass.customPrintTitle << {->
println "changin ur class"
printTitle()
}
def b = new Book()
b.customPrintTitle()