o.errors.allErrors.each {println ذلك} بشكل افتراضي عند فشلها في حفظ كائن المجال

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

سؤال

عند استمرار كائنات المجال باستخدام الكؤوس المقدسة / GORM كثيرا ما أجد نفسي أتساءل لماذا حفظ () فشلت المكالمة.

ويمكن بسهولة أن تحل عن طريق إضافة منطق:

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

ولكن، مضيفا ان هذا في كل مكان أفعل. حفظ () يضيف الكثير من التعليمات البرمجية مكرر. في روح DRY أود أن تكوين الكؤوس المقدسة / GORM لطباعة أي حفظ-الأخطاء تلقائيا إلى وحدة التحكم (ستدير). هل هذا ممكن؟ إذا لم يكن كذلك، كيف يمكنني تمديد GORM لجعله ممكنا؟

هل كانت مفيدة؟

المحلول

والحل:

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

وهذا يضيف طريقة تسمى ق () التي سيدعو حفظ () وطباعة أي أخطاء.

نصائح أخرى

وهذه ليست أنظف المظهر، وربما كان هناك <م> أفضل ، <م> 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