तक पहुंच के साथ रेल सहायकों को ओवरराइड करें, मैं रेल के परिचित सहायकों का उपयोग करना चाहता हूं, लेकिन थोड़ा बदलकर कार्यक्षमता के साथ। जिस तरह से मैं इसे देख, मैं की तरह कुछ करने के लिए सक्षम होना चाहते हैं:मूल
- बंदर पैचिंग: रेल सहायक मॉड्यूल को पुन: खोलने
module AwesomeHelper #... create alias of stylesheet_link_tag to old_stylesheet_link_tag def stylesheet_link_tag(*args) if @be_awesome awesome_stylesheet_link_tag *args else old_stylesheet_link_tag *args end end end
तरह से मैं इसे देख, मैं तीन विकल्प हैं । यदि रेल टीम कभी भी अपने सहायक मॉड्यूल का नाम बदलती है, तो मेरा कोड बेकारता का स्रोत बन जाता है। दुर्बल नहीं, लेकिन आदर्श नहीं है।
- विभिन्न विधि नामों का उपयोग करें: आम रेल इंटरफेस से चिपकने की कोशिश करना मेरा पतन हो सकता है। मेरे परिवर्तन अन्य डेवलपर्स के लिए भ्रम का स्रोत बन सकते हैं
- अलग-अलग तरीकों (नया): यह सुनिश्चित नहीं है कि यह काम करेगा या नहीं, या यह 1 के समान ही कमजोर होगा। यह शोध करेगा, लेकिन यह अच्छा हो सकता है प्रस्थान बिंदू।
तो सवाल यह है कि, क्या मैं इन उप-इष्टतम समाधानों में से एक के साथ फंस गया हूं, या क्या कोई अन्य तरीका है जिसे मैंने नहीं माना है? यदि मैं विकल्प 3 के लिए जाता हूं, तो क्या रेलवे सहायक मॉड्यूल को सीधे संबोधित किए बिना ऐसा करने का कोई तरीका है?
(नोट:। मैं संदर्भ निकाल दिया है, के रूप में यह सवाल करने के लिए कुछ भी नहीं कहते हैं)
आप जानते हैं कि ... यह इतना पागल स्पष्ट है, मैं अपने दिमाग को काम करने के लिए रैक करने की कोशिश कर रहा हूं क्यों मैंने सोचा कि यह काम नहीं करेगा! मैं आज रात कोशिश कर रहा हूं और, अगर यह काम करता है, तो मेरे दिमाग में गंभीर शब्द होंगे, शायद एक ईंट की दीवार शामिल है। बेशक, अपने उत्तर को स्वीकार करने के बाद ...: डी – user208769
@ user208769 Hehehe। वह तो कमाल है। जैसा कि मैं सबसे अच्छा समझता हूं, इस तरह से ओवरराइडिंग विधियों को आम तौर पर किसी भी परिस्थिति में बेहतर माना जाता है। [कक्षा # पूर्वजों] (http://ruby-doc.org/core-1.9.3/Module.html#method-i-ancestors) हाइजैक विधि के लिए विधि लुकअप पथ में एक अच्छी जगह लगाने में वास्तव में सहायक हो सकता है प्रेषण (या ओवरराइड के साथ आपका कस्टम मॉड्यूल सबसे अच्छा प्रभाव में शामिल करने की आवश्यकता है)। – Cade
क्या? :) आप मज़ाक कर रहे हैं! यह एक बड़ा गेटचा है! आपके रास्ते में आपको प्रत्येक कक्षा में सहायक शामिल करना होगा जिसमें एसेटटैगहेपर शामिल है। समय उड़ता है और आप या कोई और आपके पैच को शामिल करने की आवश्यकता के बारे में भूल सकता है। आप बस एसेटटैगहेपर शामिल करते हैं और आश्चर्यचकित होना शुरू करते हैं: मेरी साइट अब अलग दिखती क्यों है? यह अच्छा है जब आप और पैच निर्माता एक ही व्यक्ति हैं। लेकिन अगर नहीं तो क्या? – jdoe