2015-08-31 9 views
7

मैं रेल हुक लागू करने के लिए रूबी परिशोधन का उपयोग करने की कोशिश कर रहा हूं।रूबी परिष्करण और हुक

मैं बंदर पैचिंग से बचना चाहता हूं। बंदर यह पैच के रूप में ऐसी

ActiveRecord::Base.class_eval do 
    after_find do 
    # do something with 
    my_method 
    end 

    def my_method 
    # something useful 
    end 
end 

काम करेगा जब मैं इस तरह की तरह कुछ कर रही द्वारा वर्ग विधि है कर लिया है:

module ActiveRecordRefinements 
    refine ActiveRecord::Base.singleton_class do 
    def my_method 
    #something cool 
    end 
    end 
end 

लेकिन मैं हुक नहीं चल सकता। मैंने self.used(klass) का उपयोग करने का प्रयास किया लेकिन ऐसा लगता है कि सिंटैक्स को सही नहीं मिला है।

किसी भी मदद का स्वागत है।

धन्यवाद।

+2

आपको 'ActiveRecord :: Base' पर' सिंगलटन_क्लास 'को कॉल करने की आवश्यकता नहीं है क्योंकि परिशोधन सिंगलेट हैं। – Nathan

+0

मैं एआर के डीएसएल में जोड़ने की कोशिश कर रहा हूं। '' ' वर्ग फू <एआर की तरह कुछ :: बेस ActiveRecordRefinements का उपयोग कर my_method: my_stuff अंत ' '' जब से मैं एक वस्तु को विधियां जोड़ने नहीं कर रहा हूँ (अच्छी तरह से, एक सिंगलटन वस्तु), मैंने पाया कि मुझे सिंगलटन_क्लास – Max

+0

की आवश्यकता थी बंदर पैचिंग और निर्भरता इंजेक्शन के बीच एक अच्छी रेखा है। आम तौर पर बंदर पैचिंग को मूल व्यवहार को फिर से परिभाषित करने के रूप में परिभाषित किया जाता है जो कोर के भविष्य के संस्करणों के साथ काम करने के लिए जरूरी नहीं है। एक क्लीनर निर्भरता इंजेक्शन मॉडल संघर्ष से बचने और न्यूनतम पदचिह्न बनाए रखने की कोशिश करता है। – tadman

उत्तर

संबंधित मुद्दे