इन दो तरीकों फ़ाइलों रेल में लोड हो रहे हैं:
- यह autoload प्रक्रिया में पंजीकृत है, और आप एक निरंतर कि फ़ाइल नाम से मेल खाती है के संदर्भ हैं। उदाहरण के लिए, यदि आपके पास
app/controllers/pages_controller.rb
और संदर्भ पृष्ठ नियंत्रक हैं, app/controllers/pages_controller.rb
स्वचालित रूप से लोड हो जाएंगे। यह लोड पथ में निर्देशिकाओं की प्रीसेट सूची के लिए होता है। यह रेल की एक विशेषता है, और यह सामान्य रूबी लोड प्रक्रिया का हिस्सा नहीं है।
- फ़ाइलें स्पष्ट रूप से
require
डी हैं। यदि कोई फ़ाइल require
डी है, तो रूबी आपके लोड पथों में पथों की पूरी सूची देखती है, और पहला मामला ढूंढें जहां फ़ाइल require
डी लोड पथ में है। आप $ LOAD_PATH ($ :) के लिए उपनाम का निरीक्षण करके संपूर्ण लोड पथ देख सकते हैं।
के बाद से lib
अपनी लोड पथ में है, तो आप दो विकल्प हैं: या तो स्थिरांक के रूप में ही नाम के साथ आपकी फ़ाइलों के नामकरण, इसलिए रेल उन्हें स्वचालित रूप से लेने जाएगा जब आप प्रश्न में लगातार संदर्भ, या स्पष्ट रूप से की आवश्यकता होती है मॉड्यूल।
मुझे यह भी पता है कि आप किसी अन्य चीज़ के बारे में भ्रमित हो सकते हैं। एप्लिकेशन कंट्रोलर सिस्टम में रूट ऑब्जेक्ट नहीं है। का निरीक्षण करें:।
module MyModule
def im_awesome
puts "#{self} is so awesome"
end
end
class ApplicationController < ActionController::Base
include MyModule
end
class AnotherClass
end
AnotherClass.new.im_awesome
# NoMethodError: undefined method `im_awesome' for #<AnotherClass:0x101208ad0>
आप आप में उपयोग करना चाहते हैं जो कुछ वर्ग में मॉड्यूल शामिल करने के लिए की आवश्यकता होगी
class AnotherClass
include MyModule
end
AnotherClass.new.im_awesome
# AnotherClass is so awesome
बेशक
, क्रम में पहले स्थान पर मॉड्यूल शामिल करने के लिए सक्षम होने के लिए, आपको इसे उपलब्ध कराने की आवश्यकता होगी (ऊपर दी गई तकनीकों में से किसी एक का उपयोग करके)।
स्रोत
2009-07-02 17:11:41
पर अधिक विस्तार से वर्णित जोड़ना चाहता था: यदि आपके मॉड्यूल में से एक/lib (या ऑटोलोड निर्देशिका में से एक में) पहले ही परिभाषित किया गया है; उदाहरण के लिए आप ActiveRecord या स्ट्रिंग को अधिभारित करते हैं, आपको इसे स्पष्ट रूप से आवश्यकता होगी या इसे – Mike
अजीब रूप से लोड नहीं किया जाएगा, मुझे मिल रहा है: अनन्य निरंतर GaClient (NameError), जब तक मुझे पहले 'ga_client' की आवश्यकता नहीं होती है (कक्षा को परिभाषित किया जाता है lib/ga_client.rb)। क्या ऑटोलोड नामकरण योजना के लिए दस्तावेज है? – mkirk