2009-03-04 9 views
5

Grails/GORM का उपयोग करते हुए डोमेन ऑब्जेक्ट्स को बनाए रखने पर मैं अक्सर सोचता हूं कि एक सेव() कॉल विफल क्यों होती है।o.errors.allErrors.each {println it} किसी डोमेन ऑब्जेक्ट को सहेजने में विफल होने पर डिफ़ॉल्ट रूप से {println it}

यह आसानी से तर्क जोड़कर हल किया जा सकता है:

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

बहरहाल, यह हर जगह मैं एक .save (कर जोड़ने) डुप्लिकेट कोड का एक बहुत कुछ कहते हैं। डीआरवाई की भावना में मैं कंसोल (stderr) में किसी भी सहेजने वाली त्रुटियों को स्वचालित रूप से मुद्रित करने के लिए Grails/GORM को कॉन्फ़िगर करना चाहता हूं। क्या यह संभव है? यदि नहीं, तो मैं इसे संभव बनाने के लिए जीओआरएम कैसे बढ़ा सकता हूं?

उत्तर

9

समाधान::

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

यह कहते हैं एक विधि कहा जाता है() कि बचाने के फोन करेगा() और मैं एक साथ इस कोड है कि कुछ आप का विस्तार कर सकता है और उपयोग हो सकता है डाल here देख के आधार पर किसी भी त्रुटि मुद्रित करें।

+1

यह मेरे द्वारा दिए गए उत्तर का एक अच्छा विस्तार है। खुशी है कि आप इसे हल किया। – codeLes

+3

यह सभी वस्तुओं को एस() जोड़ देगा, न केवल डोमेन ऑब्जेक्ट्स। इसे केवल डोमेन ऑब्जेक्ट्स में जोड़ने के लिए, मुझे लगता है कि आपको प्लगइन के doWithDynamicMethods बंद करने में मेटाप्रोग्रामिंग करने की आवश्यकता है –

0

यह साफ देख नहीं है, और वहाँ शायद एक बेहतर, groovier तरीका यह है है।

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

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

def b = new Book() 

b.customPrintTitle() 
संबंधित मुद्दे