2011-09-18 21 views
8

में सहायक विधि देखें मेरे मॉडल में एक क्लास विधि है, और मुझे अपने दृश्य सहायकों में से एक विधि तक पहुंचने की आवश्यकता है। वर्तमान में मैं include TalkHelper समेत हूं, लेकिन मुझे अभी भी NoMethodError मिलता है।रेल 3 मॉडल

उत्तर

9

आप अपने lib फ़ोल्डर में सहायक हो सकते हैं और उन्हें कहीं भी शामिल कर सकते हैं। इस तरह: lib/some_helper.rb

module SomeHelper 
    def somedef 
    #your code there 
    end 
end 
+0

'module' (लोअरकेस) होना चाहिए? –

+0

सुनिश्चित करें। तय! (15 प्रतीकों) – railscard

6

आप extend के लिए यह आवश्यकता होगी आप एक वर्ग विधि में सहायक की जरूरत है, नहीं include यह।

module TalkHelper 
    def woo; 'hoo' end 
end 

class MyClass 
    extend TalkHelper 

    def self.boo; woo end 
end 

MyClass.boo #=> 'hoo' 

बस, दृश्य संदर्भ के बाहर सहायकों के साथ सावधान रहना रूप में सहायकों controller पर एक अनुरोध है, जो अपने मॉडल में उपलब्ध नहीं होगा के संदर्भ से कुछ और ही निर्भर करती है, या हो सकता है।

ApplicationController.helpers.your_helper_method 

या

YourController.helpers.your_helper_method 

सबसे अच्छा समाधान अपने कोड refactor करने के लिए इतना है कि आप की आवश्यकता नहीं है:

41

अपने मॉडल में, आपको निम्न की तरह कुछ कर सकते हैं मॉडलों से बिल्कुल देखने के लिए हेल्पर कोड कॉल करने के लिए। यह आरओआर रास्ता नहीं है। जैसा कि अन्य बताते हैं, आप सहायक फ़ोल्डर को lib फ़ोल्डर में निकाल सकते हैं।

अधिक जानकारी के लिए देखें:

http://railscasts.com/episodes/132-helpers-outside-views

+0

मैं आपकी सलाह का पालन करता हूं और अपना कोड अपवर्तित करता हूं ताकि मुझे मॉडल में सहायक विधि का उपयोग न करना पड़े। – LanguagesNamedAfterCofee

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