2013-08-23 10 views
7

मैं एक सामान्य उद्देश्य स्ट्रिंग मैनिपुलेशन क्लास बनाना चाहता हूं जिसका उपयोग मेरे रेल अनुप्रयोग में मॉडल, दृश्य और नियंत्रकों में किया जा सकता है।रेल: मेरी lib निर्देशिका में मॉड्यूल तक नहीं पहुंच सकता

अभी, मैं अपनी lib निर्देशिका में मॉड्यूल डालने का प्रयास कर रहा हूं और मैं इसे परीक्षण करने के लिए रेल कंसोल में फ़ंक्शन तक पहुंचने का प्रयास कर रहा हूं। मैंने इसी तरह के सवालों से कई तकनीकों की कोशिश की है, लेकिन मैं इसे काम नहीं कर सकता।

मेरी lib/filenames.rb फ़ाइल में:

module Filenames 

    def sanitize_filename(filename) 
    # Replace any non-letter or non-number character with a space 
    filename.gsub!(/[^A-Za-z0-9]+/, ' ') 

    #remove spaces from beginning and end 
    filename.strip! 

    #replaces spaces with hyphens 
    filename.gsub!(/\ +/, '-') 
    end 

    module_function :sanitize_filename 

end 

जब मैं sanitize_filename ("कुछ स्ट्रिंग") कॉल करने का प्रयास करें, मैं एक कोई विधि त्रुटि मिलती है। जब मैं Filenames.sanitize_filename ("कुछ स्ट्रिंग") को कॉल करने का प्रयास करता हूं, तो मुझे एक अनियमित स्थिर त्रुटि मिलती है। और जब मैं '/ lib/filenames' को शामिल करने का प्रयास करता हूं तो मुझे एक लोड त्रुटि मिलती है।

  1. क्या यह ऐसी विधि बनाने का सबसे पारंपरिक तरीका है जिसे मैं कहीं भी एक्सेस कर सकता हूं? क्या मुझे इसके बजाय कक्षा बनाना चाहिए?

  2. मैं इसे कैसे काम कर सकता हूं? :)

धन्यवाद!

+2

संभवतः डुप्लिकेट [रेल में ओओ डिजाइन: कहां रखना है] (http://stackoverflow.com/questions/1068558/oo-design-in-rails-where-to-put-stuff) –

+3

या संभव डुप्लिकेट [रेल 3 में lib फ़ोल्डर से मॉड्यूल क्लास लोड करने का सबसे अच्छा तरीका] (http://stackoverflow.com/questions/3356742/best-way-to-load-module-class-from-lib-folder-in-rails- 3) – RyanWilcox

उत्तर

10

वास्तव में एक महान उत्तर के लिए, अपने सवाल पर टिप्पणी में संदर्भित येहुदा काट्ज़ का उत्तर देखें (और वास्तव में, इसे देखें)।

इस मामले में संक्षिप्त उत्तर यह है कि आप शायद अपनी फ़ाइल लोड नहीं कर रहे हैं। रयान विल्कोक्स ने आपको दिया लिंक देखें। आप अपनी फ़ाइल में सिंटैक्स त्रुटि डालकर इसे देख सकते हैं - यदि आपका ऐप (सर्वर या कंसोल) शुरू करते समय वाक्यविन्यास त्रुटि नहीं उठाई जाती है, तो आप जानते हैं कि फ़ाइल लोड नहीं हो रही है।

यदि आपको लगता है कि आप इसे लोड कर रहे हैं, तो कृपया उस कोड को पोस्ट करें जिसका उपयोग आप इसे लोड करने के लिए कर रहे हैं। फिर, लिंक देखें RyanWilcox आपको विवरण के लिए दिया। इसमें यह कोड शामिल है, जो आपके पर्यावरण कॉन्फ़िगरेशन फ़ाइलों में से एक में जाता है:

# Autoload lib/ folder including all subdirectories 
config.autoload_paths += Dir["#{config.root}/lib/**/"] 

लेकिन वास्तव में, येहुदा के उत्तर को पढ़ें।

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