2011-01-07 11 views
31

मेरे पास मेरे रेल आवेदन में 100 से अधिक मॉडल हैं, और केवल संगठन के लिए, मैं उन्हें मुख्य मॉडल फ़ोल्डर के नीचे फ़ोल्डरों में विभाजित कर रहा हूं, बस परियोजना पर नेविगेट करना और संबंधित फाइलें देखना आसान बनाना ।क्या यह एक बुरा विचार है कि मॉडल को निर्देशिकाओं में विभाजित करें?

क्या यह एक बुरा विचार है? ऐसा करने के लिए रेल मार्ग क्या है?

+0

100 से अधिक मॉडल? क्या यह एक बड़ी परियोजना है? –

उत्तर

62

नहीं, यह एक बुरा विचार नहीं है। बहुत से लोग इसे करते हैं और मैं इसके बिना बड़े अनुप्रयोगों में नहीं रह सकता था।

पहले सिर्फ अपने मॉडल को स्थानांतरित करने के लिए है:

इसमें करने के दो तरीके हैं। हालांकि, आपको मार्गों को लोड करने के लिए रेल को बताना होगा (क्योंकि यह नहीं पता होगा कि वे कहां हैं)। इस तरह की कुछ चाल चलनी चाहिए:

# In config/application.rb 
module YourApp 
    class Application < Rails::Application 
    # Other config options 

    config.autoload_paths << Dir["#{Rails.root}/app/models/*"] 
    end 
end 

पहला तरीका आसान है, लेकिन वास्तव में यह सबसे अच्छा तरीका नहीं है। दूसरा तरीका है कि वे कर रहे हैं समूहों के साथ अपने मॉडल नेमस्पेसिंग शामिल है। इसका मतलब है कि बजाय User और UserGroup और UserPermissions होने के, आप User, User::Group और User::Permission है।

इसका उपयोग करने के लिए, इस तरह के मॉडल उत्पन्न करें: rails generate model User::Group। रेल स्वचालित रूप से आपके लिए सभी फ़ोल्डर्स बनाएंगे।

class User < ActiveRecord::Base 
    belongs_to :group # Rails will detect User::Group as it's in the same namespace 
end 

class User::Group < ActiveRecord::Base 
    has_many :users 
end 

आप जितने चाहें नेमस्पेसिंग की लेकिन कई स्तरों निर्दिष्ट कर सकते हैं, तो User::Group::Permission होगा: एक अतिरिक्त लाभ यह है कि इस दृष्टिकोण के साथ, आप एक नाम स्थान के भीतर संगठनों के लिए पूरा मॉडल का नाम उल्लेख करने की जरूरत नहीं होगी मुमकिन।

+0

आपको लोड पथ में उप-निर्देशिकाएं जोड़ने की आवश्यकता नहीं है क्योंकि ऐप/मॉडल पहले से मौजूद हैं। नेस्टेड मॉडल जैसे 'उपयोगकर्ता :: समूह' के संदर्भ में, रेल इन पथों को देखकर स्वचालित रूप से लोड हो जाएंगे। सभी 'ऐप' स्थिरांक उत्पादन मोड में उत्सुक हैं। –

+0

@ रयान हां, अगर आप अपने मॉडल का नाम देते हैं। यदि आप * नामकरण नहीं करते हैं लेकिन फिर भी उन्हें सबफ़ोल्डर में डालते हैं, और पथ को 'कॉन्फ़िगरेशन' में नहीं जोड़ते हैं। autoload_paths', वे लोड नहीं होंगे। – vonconrad

16

100 मॉडल के लिए, यह व्यावहारिक रूप से एक आवश्यकता है। 100 मॉडल एक निर्देशिका में शोर है।

इस प्रयास करें रेल मार्ग (टीएम)

rails new MultiDirectoryExample 
cd MultiDirectoryExample 
rails generate scaffold User::Photo description:string 

घड़ी स्क्रिप्ट उत्पादन की एक विचार मिलता है और उत्पन्न फ़ाइलों को देखने के लिए।

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