o.errors.allErrors.each {println it}ドメインオブジェクトの保存に失敗した場合のデフォルト

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
}

これにより、save()を呼び出してエラーを出力するs()というメソッドが追加されます。

他のヒント

これは見た目がきれいではありません。おそらく、これを行うにはより良い 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