चूंकि रेल एमवीसी के संदर्भ में संरचना प्रदान करते हैं, इसलिए का उपयोग करके मॉडल, व्यू, और नियंत्रक कंटेनर का उपयोग करना आपके लिए उपलब्ध है। शुरुआती (और यहां तक कि कुछ मध्यवर्ती प्रोग्रामर) के लिए सामान्य मुहावरे ऐप में मॉडल (डेटाबेस क्लास), नियंत्रक, या दृश्य में सभी तर्क को क्रैक करना है।
किसी बिंदु पर, कोई व्यक्ति "वसा-मॉडल, पतला-नियंत्रक" प्रतिमान को इंगित करता है, और मध्यवर्ती डेवलपर्स जल्द ही अपने नियंत्रकों से सब कुछ उत्पादित करते हैं और इसे मॉडल में फेंक देते हैं, जो एप्लिकेशन तर्क के लिए एक नया कचरा बनना शुरू कर देता है ।
स्कीनी नियंत्रक वास्तव में एक अच्छा विचार हैं, लेकिन सिद्धांत - मॉडल में सब कुछ डालने, वास्तव में सबसे अच्छी योजना नहीं है।
रूबी में, आपके पास चीजों को अधिक मॉड्यूलर बनाने के लिए कुछ अच्छे विकल्प हैं। एक काफी लोकप्रिय जवाब केवल मॉड्यूल का उपयोग करना है (आमतौर पर lib
में रखा गया है) जिसमें विधियों के समूह हैं, और फिर उचित कक्षाओं में मॉड्यूल शामिल हैं। यह उन मामलों में सहायता करता है जहां आपके पास कार्यक्षमता की श्रेणियां हैं जिन्हें आप कई कक्षाओं में पुन: उपयोग करना चाहते हैं, लेकिन जहां कार्यक्षमता अभी भी कक्षाओं से जानबूझकर जुड़ी हुई है।
याद रखें, जब आप एक वर्ग में एक मॉड्यूल में शामिल हैं, तरीकों, वर्ग के उदाहरण तरीकों बन ताकि आप अभी भी एक वर्ग के तरीकों में से एक टन युक्त साथ खत्म, वे तो बस से अधिक फ़ाइलों में अच्छी तरह से व्यवस्थित होते हैं।
यह समाधान कुछ मामलों में अच्छी तरह से काम कर सकता है - अन्य मामलों में, आप अपने कोड में कक्षाओं का उपयोग करने के बारे में सोचना चाहते हैं जो मॉडल, विचार या नियंत्रक नहीं हैं।
इसके बारे में सोचने का एक अच्छा तरीका "एकल जिम्मेदारी सिद्धांत" है, जो कहता है कि एक वर्ग को एक (या छोटी संख्या) चीजों के लिए ज़िम्मेदार होना चाहिए। आपके मॉडल डेटाबेस से डेटा तक लगातार डेटा के लिए ज़िम्मेदार हैं। आपके नियंत्रक अनुरोध प्राप्त करने और व्यवहार्य प्रतिक्रिया लौटने के लिए ज़िम्मेदार हैं।
आप अवधारणाओं है कि उन बक्से (हठ, अनुरोध/प्रतिक्रिया प्रबंधन) में बड़े करीने से फिट नहीं है है, तो आप शायद के बारे में सोचना चाहते कि कैसे आप होगा मॉडल प्रश्न में विचार। आप कहीं और एप्लिकेशन/कक्षाओं में गैर मॉडल वर्गों स्टोर कर सकते हैं, या, और ऐसा करके अपनी लोड पथ के लिए उस निर्देशिका जोड़ें:
config.load_paths << File.join(Rails.root, "app", "classes")
आप यात्री या JRuby प्रयोग कर रहे हैं, तो आप शायद भी अपने को जोड़ना चाहते हैं उत्सुक लोड पथ के लिए पथ:
config.eager_load_paths << File.join(Rails.root, "app", "classes")
-से कि एक बार आप रेल जहां आप अपने आप को इस सवाल पूछ पाते हैं में एक बिंदु पर मिलता है, यह मॉडलिंग वर्गों है कि नहीं कर रहे अपने रूबी चॉप को मांस और शुरू करने के लिए समय आ गया है है केवल एमवीसी कक्षाएं नहीं हैं जो रेल आपको डिफ़ॉल्ट रूप से देती हैं।
अद्यतन: यह उत्तर रेल 2.x और उच्चतर पर लागू होता है।
डी ओह। गैर-मॉडल के लिए एक अलग निर्देशिका जोड़ना मेरे लिए नहीं हुआ था। मैं एक साफ-सुथरा महसूस कर रहा हूं ... –
येहुदा, इसके लिए धन्यवाद। बहुत बढ़िया जवाब।यह वही है जो मैं अपने द्वारा प्राप्त किए गए ऐप्स (और जो मैं करता हूं) में देख रहा हूं: नियंत्रकों, विचारों, विचारों और नियंत्रकों और विचारों के लिए स्वचालित रूप से प्रदान किए गए सहायक उपकरण में सबकुछ। फिर मिश्रण से libins आओ, लेकिन वास्तविक ओओ मॉडलिंग करने का कोई प्रयास कभी नहीं किया है। आप सही हैं, यद्यपि: "ऐप्स/कक्षाओं, या कहीं और में।" सिर्फ यह जांचना चाहता था कि क्या कुछ मानक उत्तर है जो मुझे याद आ रहा है ... –
हाल के संस्करणों के साथ, config.autoload_paths ऐप के अंतर्गत सभी निर्देशिकाओं के लिए डिफ़ॉल्ट है। इसलिए आपको ऊपर वर्णित config.load_paths को बदलने की आवश्यकता नहीं है। मैं eager_load_paths (अभी तक) के बारे में निश्चित नहीं हूं, और इसे देखने की आवश्यकता है। क्या कोई पहले से ही जानता है? –