o.errors.allErrors.each {распечатывает это} по умолчанию при сбое сохранения объекта домена

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

Вопрос

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

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

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

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

Это было полезно?

Решение

Решение:

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

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

Другие советы

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

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

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

def b = new Book()

b.customPrintTitle()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top