5

当使用 Grails/GORM 持久化域对象时,我经常发现自己想知道为什么 save() 调用会失败。

这可以通过添加逻辑轻松解决:

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

但是,在我执行 .save() 的任何地方添加它都会添加很多重复的代码。本着 DRY 的精神,我想将 Grails/GORM 配置为自动将任何保存错误打印到控制台(stderr)。那可能吗?如果没有,我如何扩展 GORM 以使其成为可能?

4

2 回答 2

9

解决方案:

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

这将添加一个名为 s() 的方法,该方法将调用 save() 并打印任何错误。

于 2009-03-04T23:52:27.017 回答
0

这不是最干净的外观,可能有更好、更规范的方法来做到这一点。基于查看here,我将这段代码放在一起,您可以扩展和使用它:

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

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

def b = new Book()

b.customPrintTitle()
于 2009-03-04T19:37:17.350 回答