2010-09-30 10 views
6

आइए वास्तविक दुनिया उदाहरण का उपयोग करें।रेल पर रूबी में बंदर पैच कैसे करें?

मैं बंदर पैच WillPaginate :: LinkRenderer.to_html विधि चाहता हूं।

अब तक मैं कोशिश की है: config/environments.rb में lib/बंदरों/will_paginate_nohtml.rb

  • जोड़ा गया:

    1. फ़ोल्डर में एक फाइल बनाई के अंत में 'बंदरों/will_paginate_nohtml' की आवश्यकता होती है फ़ाइल
    2. है कि फाइल के अंदर, यह मेरा कोड था:

    module Monkeys::WillPaginateNohtml 
        def to_html 
        debugger 
        super 
        end 
    end 
    
    WillPaginate::LinkRenderer.send(:include, Monkeys::WillPaginateNohtml) 
    

    लेकिन किसी भी तरह, डीबगर को पारित नहीं किया जाता है। ऐसा लगता है कि पैचिंग असफल रहा।

    किसी भी मदद की सराहना की जाएगी, धन्यवाद!

  • उत्तर

    10

    और क्या @shingana द्वारा इस एक :-) समाधान के बारे में, @kandadaboggu क्योंकि वहां कोई काम नहीं करेगा यहाँ "सुपर"। आप मूल संस्करण को सुपर संस्करण पर कॉल करना चाहते हैं।

    module WillPaginate 
        class LinkRenderer 
        alias_method :to_html_original, :to_html 
        def to_html 
         debugger 
         to_html_original 
        end 
        end 
    end 
    
    +0

    + 1 क्योंकि जब आप पैच करते हैं तो कोई "सुपर" नहीं होता है, हालांकि मैं रेंडरर को कस्टमाइज़ करने के लिए @vise का उत्तर पसंद करूंगा (और वहां "सुपर" होगा)। – hurikhan77

    +0

    मैं पहले से ही मिस alias_method_chain की तरह याद करता हूं, और यह केवल एक महीने के लिए चला गया है –

    +0

    @MattBriggs आप किस बारे में बात कर रहे हैं? यह अभी भी 4.0.2 के रूप में है: http://apidock.com/rails/Module/alias_method_chain – Chloe

    0

    मुझे लगता है कि आप विधि

    module WillPaginate 
        class LinkRenderer 
        def to_html 
         debugger 
         super 
        end 
        end 
    end 
    
    0

    खोलने की जरूरत है इस प्रयास करें:

    class WillPaginate::LinkRenderer 
        def to_html 
        debugger 
        super 
        end 
    end 
    
    5

    अपने प्रश्न के शीर्षक भ्रामक है। वाकई, मुझे लगता है कि आप शायद will_paginate पेज सूची संरचना को कस्टमाइज़ करना चाहते हैं, जिसे अलग-अलग किया जा सकता है।

    तो आपके मामले में रेंडरर का विस्तार करने का सही तरीका है। उदाहरण के लिए (config के माध्यम से/initializers) एक प्रारंभकर्ता से निम्नलिखित लोड:

    class CustomPaginationRenderer < WillPaginate::LinkRenderer 
    
        def to_html 
        # Your custom code, debugger etc 
        end 
    
    end 
    

    फिर, के लिए आपके आवेदन इस रेंडरर का उपयोग निम्नलिखित जोड़ें अपने config/environment.rb फाइल करने के लिए:

    WillPaginate::ViewHelpers.pagination_options[:renderer] = 'CustomPaginationRenderer' 
    
    संबंधित मुद्दे