2009-03-04 6 views
5

Grails/GORMを使用してドメインオブジェクトを永続化すると、なぜsave()呼び出しが失敗するのか不思議に思うことがよくあります。o.errors.allErrors.each {println it}ドメインオブジェクトの保存に失敗するとデフォルトで

これは、簡単にロジックを追加することによって解決することができます)、しかし

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

を私は(.SAVEを行うどこでもこれを追加するには、重複したコードの多くを追加します。 DRYの精神で、Grails/GORMが自動的に保存エラーをコンソール(stderr)に出力するように設定したいと思います。それは可能ですか?そうでない場合は、GORMを拡張して可能にするにはどうすればよいですか?

答えて

9

ソリューション:hereを探しに基づいて私は一緒にあなたが拡大できるようなものと使用かもしれません。このコード入れ

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

これはS(というメソッドを追加します)(saveを呼び出すだろう)とエラーを印刷します。

+1

これは私が提供した回答の素敵な展開です。あなたがそれを解決してうれしい。 – codeLes

+3

これは、ドメインオブジェクトだけでなく、すべてのオブジェクトにs()を追加します。ドメインオブジェクトにのみ追加するには、プラグインのdoWithDynamicMethodsクロージャでメタプログラミングを行う必要があると思います –

0

これは見ているクリーンではなく、これを行うには良いgroovier方法はおそらくあります。

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

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

def b = new Book() 

b.customPrintTitle() 
関連する問題