2009-03-04 26 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

解決方案:

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

這增加了一個方法,稱爲S(),將調用保存()和打印任何錯誤。

+1

這是我提供的答案的一個很好的擴展。很高興你解決了它。 – codeLes 2009-03-05 00:02:57

0

這是不乾淨的期待,並有可能是一個更好的更巧妙的方式做到這一點。立足現在,展望here我放在一起這樣的代碼,可能是一個你可以擴展和使用:

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

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

def b = new Book() 

b.customPrintTitle()