2010-06-12 12 views
12

पर सभी मॉडलों को लोड कर रहा है मेरे पास मेरे सभी मॉडलों में एक क्लास विधि मिश्रित है। जब मॉडल वर्ग का मूल्यांकन किया जाता है तो विधि को बुलाया जाता है। दुर्भाग्यवश (मेरे लिए), यह मांग पर प्रतीत होता है, जब भी विकास env में मॉडल की आवश्यकता होती है। रेलवे शुरू होने पर सभी मॉडलों को कैसे लोड कर सकते हैं? क्या यह भी सलाह दी जाती है?रेल 3 स्टार्टअप

class Foo < ActiveRecord::Base 
    include Acl 
    register_acl # i need this to be called for all models at start up 
end 

असल में, register_acl "क्रियाओं" के कुछ तर्क लेता है कि मॉडल को नियंत्रित किया जाना चाहिए। मान लीजिए कि फू की कार्रवाई में से एक "प्रबंधन" है और सिस्टम को स्टार्ट अप पर इस कार्रवाई के बारे में पता होना चाहिए। मुझे लगता है कि इस तर्क के लिए मॉडल में सबसे प्राकृतिक जगह है।

धन्यवाद!

उत्तर

18

इस आवेदन चौड़ा आपके विन्यास में cache_classes चालू करने के लिए है करने के लिए सही तरीका पहले से लोड कर। डिफ़ॉल्ट रूप से यह विकास में है लेकिन उत्पादन में है।

आप इसे कहीं-कहीं ऐसा करना चाहते हैं:

Rails.application.eager_load! 
+1

कैश_क्लास विकास में बहुत असुविधाजनक है। मैं eaglar_load विधि कोशिश करेंगे! धन्यवाद! – janechii

0

एमवीसी अवधारणा मॉडल में स्वयं कार्य करने का इरादा नहीं है, यानी उन्हें केवल तभी कार्य करना चाहिए जब नियंत्रक उन्हें एक संदेश भेजता है (उदाहरण के लिए, @ foo.register_acl)। मॉडल उदाहरण तब भी मौजूद नहीं होने चाहिए जब तक वे नियंत्रक द्वारा बनाए जाते हैं।

आप अपनी register_acl विधि से प्राप्त करने का प्रयास कर रहे हैं?

यदि आपको वास्तव में ऑब्जेक्ट सृजन पर निष्पादित करने के लिए कुछ चाहिए तो आप प्रारंभिक() विधि का उपयोग कर सकते हैं जिसे जब भी रूबी ऑब्जेक्ट बनाया जाता है।

हालांकि अगर आपको कुछ कोड निष्पादित करने के लिए मॉडल की आवश्यकता है तो आपको कुछ कोड गंध का सामना करना पड़ सकता है और आपको अपने ऐप में कुछ बदलना होगा।

+0

प्रतिक्रिया के लिए धन्यवाद! मैंने आपको यह बताने के लिए अपना प्रश्न अपडेट कर दिया है कि मैं क्या करने की कोशिश कर रहा हूं। मैं मॉडल के उदाहरण बनाने/प्राप्त करने की कोशिश नहीं कर रहा हूं। मुझे बस स्टार्टअप पर रेल द्वारा लोड और मूल्यांकन करने के लिए मॉडल फ़ाइल की आवश्यकता है। एक नियमित रूबी कार्यक्रम में, आप उम्मीद कर सकते हैं कि स्टार्टअप पर क्लास कोड का मूल्यांकन किया जाए। धन्यवाद! – janechii

6

मुझे नहीं पता कि यह आदर्श है, लेकिन यह मेरे लिए काम करता है। config में कहीं/प्रारंभ /, मैं यह नहीं:

Dir.glob("#{Rails.root}/app/models/*.rb").sort.each { |file| require_dependency file } 

और कहा कि अपने मॉडल

+0

यह घुड़सवार इंजनों के भीतर नेस्टेड मॉडल या मॉडल लोड नहीं करेगा, उदाहरण के लिए। बेहतर दृष्टिकोण सुझाव दिया गया है कि बेहतर दृष्टिकोण 'Rails.application.eager_load! 'को कॉल कर रहा है। – dzajic

+0

यह इंगित करने के लिए धन्यवाद, @dzajic। यह हमेशा के लिए रहा है, लेकिन यह समय के बारे में बेहतर समाधान में जवाब बदल गया है! – janechii