2009-12-07 18 views
8

मेरे रेल अनुप्रयोग के भीतर कुछ कार्यक्षमता बेहतर दिखती है जैसे कि यह एक अलग "मॉड्यूल" था, जिसे require के माध्यम से एक्सेस किया जाना चाहिए। उदाहरण के लिए, मान लीजिए कि यह फिबोनाची संख्याओं की गणना करने के लिए एक फ़ंक्शन है।रेलवे आवेदन के भीतर मुझे अपना "मॉड्यूल" कहां रखना चाहिए?

कार्यक्षमता रेल आवेदन पर स्वतंत्र है और अन्य परियोजनाओं में पुन: उपयोग की जा सकती है, इसलिए मुझे आवेदन नियंत्रकों और मॉडलों के पास संग्रहीत नहीं किया जाना चाहिए, मुझे लगता है। लेकिन चूंकि मैं इसे अलग प्रोजेक्ट में अलग नहीं कर रहा हूं, इस प्रकार इसे vendor फ़ोल्डर में रखना सही चीज़ जैसा नहीं लगता है।

मुझे इसे कहां रखा जाना चाहिए?

उत्तर

6

इस तरह के पुन: प्रयोज्य कोड डालने की जगह lib निर्देशिका में है। हालांकि आपको require की आवश्यकता नहीं है क्योंकि lib लोड पथ में पहले से ही है और इसकी सामग्री प्रारंभिकरण के दौरान लोड की जाएगी।

यदि आपको मौजूदा कक्षा का विस्तार करने की आवश्यकता है, तो आप पहले अपना मॉड्यूल परिभाषित करें और उसके बाद इसे उस वर्ग के संदेश के रूप में भेजकर शामिल करें, जिसे आप विस्तारित करना चाहते हैं, उदा।

module MyExtensions 
    def self.included base 
    base.instance_eval do 
     def my_new_method 
     … 
     end 
    end 
    end 
end 

ActiveRecord::Base.send :include, MyExtensions 
2

मैं अक्सर lib में सामान डालता हूं, यह पता चला है कि lib के तहत कुछ भी लोड पथ में है और require डी होने की आवश्यकता नहीं है।

संपादित करें: स्टीव की टिप्पणी के बाद, फ़ाइलों की आवश्यकता के बारे में थोड़ा सा हटा दिया गया। इसके अलावा, हटाया एक जोड़े को मेरी कोड में से कुछ से की आवश्यकता है: पी

+1

आपको 'lib' में फ़ाइलों की आवश्यकता नहीं है क्योंकि यह लोड पथ –

+0

में है जो मुझे नहीं पता था। धन्यवाद। – rfunduk

2

वहाँ एक lib जो उस उद्देश्य के लिए अच्छी तरह से फिट बैठता है आतंक विरोधी परियोजनाओं में निर्देशिका है - मैं "पुस्तकालयों" वहाँ के रूप में कोड के आम बिट्स जगह। ActiveRecord कक्षाओं को पुन: प्रयोज्य उपयोगिता विधियों तक विस्तारित करने से कुछ भी।

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