मैं रेल हुक लागू करने के लिए रूबी परिशोधन का उपयोग करने की कोशिश कर रहा हूं।रूबी परिष्करण और हुक
मैं बंदर पैचिंग से बचना चाहता हूं। बंदर यह पैच के रूप में ऐसी
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)
का उपयोग करने का प्रयास किया लेकिन ऐसा लगता है कि सिंटैक्स को सही नहीं मिला है।
किसी भी मदद का स्वागत है।
धन्यवाद।
आपको 'ActiveRecord :: Base' पर' सिंगलटन_क्लास 'को कॉल करने की आवश्यकता नहीं है क्योंकि परिशोधन सिंगलेट हैं। – Nathan
मैं एआर के डीएसएल में जोड़ने की कोशिश कर रहा हूं। '' ' वर्ग फू <एआर की तरह कुछ :: बेस ActiveRecordRefinements का उपयोग कर my_method: my_stuff अंत ' '' जब से मैं एक वस्तु को विधियां जोड़ने नहीं कर रहा हूँ (अच्छी तरह से, एक सिंगलटन वस्तु), मैंने पाया कि मुझे सिंगलटन_क्लास – Max
की आवश्यकता थी बंदर पैचिंग और निर्भरता इंजेक्शन के बीच एक अच्छी रेखा है। आम तौर पर बंदर पैचिंग को मूल व्यवहार को फिर से परिभाषित करने के रूप में परिभाषित किया जाता है जो कोर के भविष्य के संस्करणों के साथ काम करने के लिए जरूरी नहीं है। एक क्लीनर निर्भरता इंजेक्शन मॉडल संघर्ष से बचने और न्यूनतम पदचिह्न बनाए रखने की कोशिश करता है। – tadman