50

मेरे पास कुछ रूबी विधियां निश्चित हैं (या सभी) नियंत्रकों की आवश्यकता है। मैंने उन्हें /app/helpers/application_helper.rb में डालने की कोशिश की। मैंने इसका इस्तेमाल विचारों में इस्तेमाल करने के तरीकों के लिए किया है। लेकिन नियंत्रक उन तरीकों को नहीं देखते हैं। क्या कोई और जगह है जिसे मुझे रखना चाहिए या क्या मुझे उन सहायक तरीकों को अलग-अलग एक्सेस करने की आवश्यकता है?रेल नियंत्रकों के लिए रूबी सहायक तरीकों को कहां रखा जाए?

नवीनतम स्थिर रेल का उपयोग करना।

उत्तर

61

आपको ApplicationController के अंदर विधि को परिभाषित करना चाहिए।

+20

उन्होंने यह भी 'जोड़ने के लिए helper_method होगा:' ApplicationController' में my_helper_method' उन्हें उपलब्ध बनाने के लिए देखा गया। – David

+0

अच्छा जोड़ा @JohnnyGrass –

+1

यह समय के साथ एक वसा नियंत्रक के लिए नेतृत्व नहीं होगा? – babonk

7

रयान बिग प्रतिक्रिया अच्छी है।

अन्य संभव समाधान अपने नियंत्रक को सहायकों को जोड़ने है:

class YourController < ApplicationController 
    include OneHelper 
    include TwoHelper 
end 

बेस्ट सादर!

13

आप view_context का उपयोग कर नियंत्रक से किसी भी सहायक विधि को कॉल कर सकते हैं, उदा।

view_context.my_helper_method 
25

आप आवेदन नियंत्रक के अंदर तरीकों परिभाषित करना चाहिए, इसके बाद आपको कुछ तरीके हैं, तो आप का पालन

class ApplicationController < ActionController::Base  
    helper_method :first_method 
    helper_method :second_method 

    def first_method 
    ... #your code 
    end 

    def second_method 
    ... #your code 
    end 
end 

के रूप में आप यह भी सहायक फ़ाइलों में शामिल हैं का पालन के रूप में

class YourController < ApplicationController 
    include OneHelper 
    include TwoHelper 
end 
+0

का उल्लंघन करता है, क्या एक लाइन पर सभी helper_methods को असाइन करने का कोई तरीका है? –

+0

@ हरशाएमवी मुझे लगता है कि आप आगे बढ़ सकते हैं जैसे 'helper_method: first_method,: second_method'। –

40

रेल के लिए कर सकते हैं कर सकते हैं 4 आगे, चिंताएं जाने का रास्ता हैं। यहां एक सभ्य लेख है http://richonrails.com/articles/rails-4-code-concerns-in-active-record-models

संक्षेप में, यदि आप अपने नियंत्रक फ़ोल्डर में देखते हैं तो आपको एक उप-फ़ोल्डर को देखना चाहिए।

module EventsHelper 
    def do_something 
    end 
end 

फिर इन पंक्तियों के साथ वहाँ में एक मॉड्यूल बनाएँ, नियंत्रक में बस में शामिल यह

class BadgeController < ApplicationController 
    include EventsHelper 

    ... 
end 
+0

मुझे यह सबसे अच्छा समाधान मिलता है जब आपको अपने सभी नियंत्रकों में शामिल सहायक विधियों की आवश्यकता नहीं होती है। यह समाधान मॉडल पर भी लागू होता है। – Dennis

+0

अच्छा। धन्यवाद :) – tonyedwardspz

+0

क्या आपको पता है कि हमें नियंत्रक चिंताओं के साथ 'ActiveSupport :: Concern' का विस्तार करने' की आवश्यकता है? – Marklar