o.errors.allErrors.each {println it} по умолчанию, когда не удается сохранить объект домена - PullRequest
5 голосов
/ 04 марта 2009

При сохранении объектов домена с использованием Grails / GORM я часто задаюсь вопросом, почему сбой вызова save ().

Это легко решить, добавив логику:

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

Однако, добавляя это везде, я делаю .save () добавляет много дублирующегося кода. В духе DRY я бы хотел настроить Grails / GORM для автоматической печати любых ошибок сохранения на консоли (stderr). Это возможно? Если нет, то как мне расширить GORM, чтобы сделать это возможным?

Ответы [ 2 ]

9 голосов
/ 05 марта 2009

Решение:

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

Это добавляет метод с именем s (), который будет вызывать save () и печатать любые ошибки.

0 голосов
/ 04 марта 2009

Это не самый чистый вид, и, вероятно, есть лучше , groovier способ сделать это. Основываясь на поиске здесь , я собрал этот код, который вы могли бы расширить и использовать:

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

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

def b = new Book()

b.customPrintTitle()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...