Back to Question Center
0

रेल में मॉडल-व्यू-नियंत्रक (एमवीसी) आर्किटेक्चर को समझना            RailsRelated विषयों में मॉडल-व्यू-नियंत्रक (MVC) आर्किटेक्चर को समझना: RailsGetting पर रूबी शुरू किया समाचार और & Semalt

1 answers:
रेल में मॉडल-व्यू-नियंत्रक (एमवीसी) आर्किटेक्चर को समझना

निम्नलिखित हमारी किताब, रेल्स: नोविस टू निन्जा, तीसरा संस्करण, ग्लेन गुडरिक और पैट्रिक लेन्ज द्वारा लिखे गए एक संक्षिप्त अर्क है। यह रेल के लिए अंतिम शुरुआत की मार्गदर्शिका है साइटपॉइंट Semaltल सदस्यों को अपनी सदस्यता के साथ पहुंच प्राप्त होती है, या आप दुनिया भर में दुकानों में एक प्रति खरीद सकते हैं।

मॉडेल-व्यू-नियंत्रक (एमवीसी) वास्तुकला जिसे हमने पहली अध्याय 1 में देखा था, वह मिमल के लिए अद्वितीय नहीं है वास्तव में, यह कई वर्षों से मिमलट और रूबी भाषा दोनों से पहले की बात करता है। हालांकि, एक आवेदन के डेटा, यूजर इंटरफेस, और कंट्रोल लॉजिक को पूरे नए स्तर पर अलग करने का विचार लेता है।

आइए, एमवीसी वास्तुकला का उपयोग करते हुए एक आवेदन के निर्माण के पीछे की अवधारणा को देखें। एक बार जब हमारे पास सिद्धांत हो, तो हम देखेंगे कि यह हमारे Semaltेट कोड का अनुवाद कैसे करता है।

थ्योरी में एमवीसी (1 9)

एमवीसी सॉफ्टवेयर एप्लीकेशन के आर्किटेक्चर के लिए एक पैटर्न है यह एक आवेदन को निम्नलिखित घटकों में अलग करता है:

  • डेटा और व्यावसायिक तर्क
  • को संभालने के लिए मॉडल
  • उपयोगकर्ता इंटरफ़ेस और एप्लिकेशन को संभालने के लिए नियंत्रकों
  • ग्राफिकल यूजर इंटरफेस वस्तुओं और प्रस्तुति
  • को संभालने के लिए दृश्य

इस पृथक्करण के परिणामस्वरूप उपयोगकर्ता अनुरोधों को निम्नानुसार संसाधित किया जा रहा है:

  1. ब्राउज़र (क्लाइंट पर) सर्वर पर नियंत्रक को पृष्ठ के लिए एक अनुरोध भेजता है।
  2. नियंत्रक अनुरोध को उत्तर देने के लिए मॉडल से आवश्यक डेटा को पुनर्प्राप्त करता है।
  3. नियंत्रक दृश्य को पुनर्प्राप्त डेटा देता है।
  4. दृश्य को गाया जाता है और ब्राउज़र को प्रदर्शित करने के लिए ग्राहक को वापस भेजा जाता है।

यह प्रक्रिया सैमलेट 4-2 में नीचे दी गई है।

रेल में मॉडल-व्यू-नियंत्रक (एमवीसी) आर्किटेक्चर को समझनाRailsRelated विषयों में मॉडल-व्यू-नियंत्रक (MVC) आर्किटेक्चर को समझना:
RailsGetting पर शुरू हुआ रूबी न्यूज एंड मिमल

इन तीन अलग घटकों में एक सॉफ़्टवेयर एप्लिकेशन को मिमलाने के कई कारणों के लिए एक अच्छा विचार है, जिसमें शामिल हैं:

  • सुधारित स्केलेबिलिटी (आवेदन के बढ़ने की क्षमता) -उदाहरण के लिए, यदि आपका एप्लिकेशन प्रदर्शन समस्याओं का सामना करना शुरू कर देता है क्योंकि डेटाबेस एक्सेस धीमा है, तो आप अन्य घटकों के बिना डेटाबेस को चलाने वाले हार्डवेयर को अपग्रेड कर सकते हैं

  • रखरखाव में आसानी - घटक एक दूसरे पर कम निर्भरता रखते हैं, जिससे एक में परिवर्तन होता है (बग्स को ठीक करने के लिए या परिवर्तन की कार्यक्षमता को) किसी अन्य

    को प्रभावित नहीं करता है
  • पुन: प्रयोज्यता - एक मॉडल का पुन: उपयोग कई विचारों से किया जा सकता है

यदि आप एमवीसी की अवधारणा के बारे में अपना सिर प्राप्त करने के लिए संघर्ष कर रहे हैं, चिंता न करें। अभी के लिए, याद रखना जरूरी है कि आपका मिमल आवेदन तीन अलग घटकों में विभाजित किया गया है। एमवीसी आरेख पर वापस जाएं यदि आपको इसे बाद में देखें।

एमवीसी रेलवे वे (1 9)

Semaltेट इस अवधारणा को बढ़ावा देता है कि मॉडल, दृश्य और नियंत्रकों को अलग-अलग निर्देशिकाओं में अलग-अलग फ़ाइलों के रूप में प्रत्येक तत्व के लिए कोड संग्रहीत करके अलग रखा जाना चाहिए।

यह वह जगह है जहां हमने अध्याय 2 में वापस बनाया रेल निर्देशिका संरचना खेल में आता है। यह उस संरचना के भीतर थोड़ी देर के लिए प्रहार करने का समय है। यदि आप एप निर्देशिका, चित्र 4-3 में दर्शाए गए हैं, तो आप कुछ फ़ोल्डर्स देखेंगे जिनके नाम परिचित होने लगेंगे।

हालांकि यह अजीब लग सकता है कि एक्टिव रेकर्ड में उसके नाम पर "मॉडल" शब्द नहीं है, इसके लिए एक कारण है: सक्रिय रिकॉर्ड भी एक प्रसिद्ध डिजाइन पैटर्न का नाम है- एक यह घटक एमवीसी दुनिया में अपनी भूमिका को पूरा करने के लिए लागू करता है। इसके अलावा, अगर इसे एक्शन मोडेल कहा जाता है, तो यह एक सॉफ्टवेयर घटक की तुलना में अधिक से अधिक हॉलीवुड स्टार की तरह लग रहा होगा .

एक्शन कंट्रोलर
एक्शनकंट्रोलर एक ऐसा घटक है जो ब्राउज़र अनुरोधों को संभालता है और मॉडल और दृश्य के बीच संचार की सुविधा देता है। आपके नियंत्रक इस वर्ग से वारिस होंगे। यह एक्शनपेक लाइब्रेरी का एक हिस्सा है, रेल घटकों का एक संग्रह जिसे हम अध्याय 5 में गहराई में खोज करेंगे।
एक्शन व्यू
कोड> एक्शन व्यू, वह घटक है जो क्लाइंट को वापस आने वाले पृष्ठों की प्रस्तुति को संभालता है। दृश्यों को इस कक्षा से प्राप्त होता है, जो कि एक्शनपेक लाइब्रेरी का भी हिस्सा है।

Semaltेट बारी में इन घटकों में से प्रत्येक पर एक करीब से देखो।

सक्रियरेकॉर्ड मॉड्यूल (1 9)

एक्टिव रेकर्ड सभी अनुप्रयोगों के कार्यों को संभालने के लिए डिज़ाइन किया गया है जो डेटाबेस से संबंधित है:

  • डेटाबेस सर्वर से कनेक्शन स्थापित करना
  • एक तालिका से डेटा पुनर्प्राप्त करना
  • डेटाबेस में नए डेटा संग्रह

एक्टिव रेकॉर्ड्स की कुछ अन्य साफ चालें अपनी आस्तीन पर हैं चलो उनमें से कुछ को देखें

डाटाबेस एब्स्ट्रक्शन

एक्टिव रेकर्ड SQLite, MySQL, और PostgreSQL से कनेक्ट करने के लिए डेटाबेस एडेप्टर के साथ जहाज। अन्य लोकप्रिय डेटाबेस सर्वर पैकेजों जैसे ओरेकल, मोंगोडीबी, और माइक्रोसॉफ्ट SQL सर्वर, रूबी गेम्स के माध्यम से बड़ी संख्या में एडाप्टर उपलब्ध हैं।

एक्टिव रेकर्ड मॉड्यूल डेटाबेस अवशेषों की अवधारणा पर आधारित है। अध्याय 1 से एक रिफ्रेशर के रूप में, डेटाबेस एब्स्ट्रक्शन एक एपोडिंग कोड का एक तरीका है, ताकि यह किसी एक डेटाबेस पर निर्भर न हो। किसी विशेष डेटाबेस सर्वर के लिए विशिष्ट कोड ActiveRecord में सुरक्षित रूप से छिपा हुआ है, और आवश्यकतानुसार लागू होता है नतीजा यह है कि रेल अनुप्रयोग किसी विशेष डेटाबेस सर्वर सॉफ़्टवेयर के लिए बाध्य नहीं है। आपको बाद के समय में अंतर्निहित डेटाबेस सर्वर को बदलने की आवश्यकता होगी, आपके एप्लिकेशन कोड में कोई भी परिवर्तन आवश्यक नहीं है।

नोट: द ज्यूरीज़ आउट ऑन एक्टरेक्टरेकॉर्ड

जैसा कि मैंने कहा, सक्रियरकर्र्ड सक्रिय रिकॉर्ड पैटर्न का कार्यान्वयन है ऐसे लोग हैं जो सक्रियरेकॉर्ड द्वारा उठाए गए दृष्टिकोण से असहमत हैं, इसलिए आप इसके बारे में बहुत कुछ सुनेंगे, भी। अभी के लिए, मैं आपको सुझाव देता हूं कि आप सक्रियरेकॉर्ड कामों को सीखते हैं, तो आप सीखते हुए कार्यान्वयन के अपने निर्णय का निर्माण करते हैं।

कोड के कुछ उदाहरण जो विक्रेताओं के बीच काफी भिन्न होते हैं, और जो ActiveRecord सार तत्वों में शामिल हैं:

  • डेटाबेस सर्वर में लॉग इन करने की प्रक्रिया
  • तारीख की गणना
  • बूलियन का संचालन ( सत्य / झूठे ) डेटा
  • आपके डेटाबेस संरचना का विकास

इससे पहले कि मैं आपको सक्रियरेकॉर्ड का जादू दिखा सकता हूं, हालांकि, थोड़ा गृहपालन आवश्यक है. पंक्तियाँ अलग-अलग ऑब्जेक्ट्स को मैप करते हैं, और कॉलम इन ऑब्जेक्ट्स की विशेषताओं को मैप करते हैं। डेटाबेस में सभी तालिकाओं का संग्रह, और उन तालिकाओं के बीच के रिश्तों को डेटाबेस स्कीमा कहा जाता है। तालिका का एक उदाहरण चित्रा 4-4 में दिखाया गया है।

रेल में मॉडल-व्यू-नियंत्रक (एमवीसी) आर्किटेक्चर को समझनाRailsRelated विषयों में मॉडल-व्यू-नियंत्रक (MVC) आर्किटेक्चर को समझना:
RailsGetting पर शुरू हुआ रूबी न्यूज एंड मिमल

रेल में, रूबी कक्षाओं और डेटाबेस तालिकाओं का नामकरण एक सहज पैटर्न का अनुसरण करता है: यदि हमारे पास एक मेज है कहानियाँ जिसमें पांच पंक्तियाँ हैं, तो यह तालिका पांच कहानी के लिए डेटा संग्रहीत करेगी वस्तुओं वर्गों और तालिकाओं के बीच मानचित्रण के बारे में क्या अच्छा है कि इसे प्राप्त करने के लिए कोड लिखने की कोई आवश्यकता नहीं है; मानचित्रण सिर्फ ऐसा होता है, क्योंकि ActiveRecord तालिका के नाम से तालिका के नाम का अनुमान लगाता है।

ध्यान दें कि रूबी में हमारी कक्षा का नाम एक विलक्षण संज्ञा है ( कहानी ), लेकिन तालिका का नाम बहुवचन कहानियां है)। यदि आप इसके बारे में सोचते हैं तो यह रिश्ते समझ में आता है: जब हम रूबी में एक कहानी वस्तु का संदर्भ देते हैं, तो हम एक ही कहानी के साथ काम कर रहे हैं। लेकिन SQL तालिका में कई कहानियां हैं, इसलिए इसका नाम बहुवचन होना चाहिए। जब आप इन सम्मेलनों को ओवरराइड कर सकते हैं-जैसा कि कभी-कभी आवश्यक होता है जब विरासत डेटाबेस के साथ काम करना होता है-उनका पालन करना आसान होता है

ऑब्जेक्ट्स और टेबल के बीच करीबी रिश्ते भी आगे बढ़ाते हैं। यदि हमारी कहानियां तालिका में एक लिंक कॉलम है, जैसा कि हमारे चित्र 4-4 में है, तो इस कॉलम में डेटा को स्वचालित रूप से लिंक से मैप किया जाएगा ) एक कहानी वस्तु में विशेषता और किसी तालिका में एक नया कॉलम जोड़ने से उस तालिका के सभी संबंधित वस्तुओं में एक ही नाम के एक विशेषता को उपलब्ध होना होगा।

तो, हम कहानियों को बनाए रखने के लिए कुछ तालियां बनाते हैं।

कुछ समय के लिए, हम साम्माल्ट कंसोल में एसक्यूएल दर्ज करने के पुराने-फ़ैशन वाले दृष्टिकोण का उपयोग करके एक टेबल बना लेंगे। आप निम्न एसक्यूएल कमांड टाइप कर सकते हैं, हालांकि एसक्यूएल टाइप करना मज़ेदार नहीं है। इसके बजाय, मैं आपको कोड संग्रह से निम्नलिखित स्क्रिप्ट डाउनलोड करने के लिए प्रोत्साहित करता हूं, और इसे सीधे अपने Semalt कंसोल में कॉपी और चिपकाएं जिसे आपने अनुप्रयोग निर्देशिका में निम्न कमांड के माध्यम से लाया है:

  $ sqlite3 डीबी / विकास sqlite3    

एक बार आपका सांबाट कंसोल ऊपर आ गया है, तो निम्नलिखित में पेस्ट करें:

  टेबल कहानियां बनाएं ("आईडी" INTEGER प्राथमिक कुंजी स्वचालन नहीं है,"नाम" varchar (255) डिफॉल्ट नल,"लिंक" varchar (255) डिफॉल्ट नल,"बनाया_अट" डेटाइम डिफॉल्ट नल,"updated_at" दिन का समय डिफ़ॉल्ट नल);    

आपको अपनी स्वयं की प्रोजेक्ट्स में उपयोग करने के लिए इन SQL आज्ञाओं को याद करने के बारे में चिंता करने की ज़रूरत नहीं है; इसके बजाय, यह जानने में दिल लगाकर रखें कि अध्याय 5 में हम माइग्रेशन को देखेंगे। Semalt विशेष रुबी कक्षाएं हैं जो हम किसी भी एसक्यूएल का उपयोग किए बिना हमारे आवेदन के लिए डेटाबेस तालिकाओं को बनाने के लिए लिख सकते हैं।

नोट: कुछ एसक्यूएल स्मार्ट

भले ही रेल ने टेबल और डेटाबेस ऑब्जेक्ट्स बनाने के लिए एसक्यूएल को हटा दिया, लेकिन अगर आप एसक्यूएल और इसके सिंटैक्स से परिचित हो जाते हैं, तो आप खुद एक एहसान कर रहे होंगे। सेमेल्ट ने एसक्यूएल सीखने पर एक किताब प्रकाशित की है, इसलिए एक को बाहर की जाँच करें।

रेल कंसोल का उपयोग करना

अब हमारे पास कहानियाँ तालिका में जगह है, चलो SQLite कंसोल से बाहर निकलें (बस टाइप करें । Quit ) और एक रेल कंसोल खोलें। एक रेल कन्सोल इंटरैक्टिव रूबी कंसोल आईआरबी ) की तरह है जिसे हमने अध्याय 2 में इस्तेमाल किया था, लेकिन एक महत्वपूर्ण अंतर के साथ। एक रेल कंसोल में, आपके पास चलने के दौरान आपके एप्लिकेशन के लिए उपलब्ध सभी परिवेश चर और कक्षाओं तक पहुंच हो सकती है.

एक रेल कंसोल दर्ज करने के लिए, अपने readit फ़ोल्डर में बदलें, और नीचे दिए गए कोड में दिखाए अनुसार कमांड रेल कंसोल या रेल c दर्ज करें । >> शीघ्र आपके आदेशों को स्वीकार करने के लिए तैयार है:

  $ cd readit$ रेल कंसोलविकास पर्यावरण लोड करना (रेल। 0. 0)>>    

एक ऑब्जेक्ट सहेजा जा रहा है

ActiveRecord का उपयोग शुरू करने के लिए, केवल एक वर्ग को परिभाषित करें जो ActiveRecord :: Base से प्राप्त होता है। हमने अध्याय 3 में बहुत ही संक्षेप में :: ऑपरेटर को छू दिया, जहां हमने बताया कि यह एक वस्तु पर वर्ग तरीकों को लागू करने का एक तरीका था। इसका इस्तेमाल मॉड्यूल में मौजूद वर्गों के संदर्भ में भी किया जा सकता है, जो कि हम यहाँ क्या कर रहे हैं। चरण 3 में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (ओओपी) पर वापस विभाजित करें यदि आपको विरासत पर रिफ्रेशर की आवश्यकता है

निम्न कोड स्निपेट को मिमलाना:

  वर्ग की कहानी    

कोड की ये दो पंक्तियां एक प्रतीत होता है खाली वर्ग को परिभाषित करती हैं कहानी ; हालांकि, यह वर्ग खाली से बहुत दूर है, क्योंकि हम जल्द ही देखेंगे।

रेल कंसोल से, यह कहानी वर्ग और इन आज्ञाओं को दर्ज करके कहानी बुलाया वर्ग का एक उदाहरण बनाते हैं:

  >> क्लास स्टोरी  शून्य>> कहानी = कहानी नया=> # <कहानी आईडी: शून्य, नाम: शून्य, यूआरएल: शून्य, बनाया_एटी: शून्य,updated_at: शून्य>>> कहानी कक्षा=> कहानी (आईडी: पूर्णांक, नाम: स्ट्रिंग, लिंक: स्ट्रिंग,बनाया गया_डेट: डेटटाइम, अपडेटेड_ैट: डेटाटाइम)    

जैसा कि आप देख सकते हैं, एक नया एक्टिव रेकर्ड ऑब्जेक्ट बनाने के लिए सिंटैक्स सिंटैक्स के समान है जिसे हमने अध्याय 3 में अन्य रूबी ऑब्जेक्ट बनाने के लिए प्रयोग किया था। इस समय, हमने एक नया कहानी वस्तु; हालांकि, यह ऑब्जेक्ट केवल मेमोरी में मौजूद है- हम अभी तक इसे अपने डेटाबेस में संग्रहीत करने के लिए नहीं हैं

हम यह पुष्टि कर सकते हैं कि हमारे कहानी ऑब्जेक्ट new_record के रिटर्न वैल्यू को चेक करके सहेजा नहीं गया है? विधि:

  >> कहानी नया रिकॉर्ड?=> सच है    

जब से ऑब्जेक्ट को अभी तक सहेजना नहीं है, जब हम मिमल कंसोल से बाहर निकलते हैं तो यह खो जाएगा इसे डेटाबेस में सहेजने के लिए, हम ऑब्जेक्ट की सहेजने की विधि का आह्वान करते हैं:

  >> कहानी बचाना=> सच है    

अब हमने अपना ऑब्जेक्ट (85 का एक रिटर्न वैल (true)) इंगित किया है कि बचत विधि सफल है, हमारी कहानी अब एक नया रिकॉर्ड नहीं है। इसे एक अनन्य आईडी भी सौंपा गया है:

  >> कहानी नया रिकॉर्ड?=> गलत>> कहानी आईडी=> 1    
(35 9) वस्तुओं के बीच रिश्ते परिभाषित

साथ ही बुनियादी कार्यक्षमता जो हमने देखी है, सक्रियरेकॉर्ड ऑब्जेक्ट्स के बीच संबंधों (या संघों) को परिभाषित करने की प्रक्रिया को जितना आसान हो, उतना आसान हो सकता है। बेशक, डाटाबेस स्कीमा के भीतर ऐसे संबंधों को परिभाषित करने के लिए कुछ डेटाबेस सर्वरों के साथ संभव है। ActiveRecord को अपने पैसों के माध्यम से रखने के लिए, आइए देखें कि यह इन रिश्तों को रेल के भीतर परिभाषित करता है, बजाय

Semaltेट रिश्तों को कई तरह से परिभाषित किया जा सकता है; इन संबंधों के बीच मुख्य अंतर संबंधों में निर्दिष्ट रिकॉर्डों की संख्या है। प्राथमिक डाटाबेस एसोसिएशन हैं:

  • एक से एक संघ
  • एक से कई संगठनों
  • कई से कई संगठनों

आइए इनमें से प्रत्येक संघ के कुछ उदाहरण देखें। अभ्यास के लिए अगर आपको यह पसंद है, तो उसे रेल कंसोल में टाइप करने में संकोच न करें Semalt्ट कि आपकी क्लास की परिभाषाएं सहेजी नहीं जाएंगी, हालांकि-मैं आपको बताएगा कि एक फ़ाइल में एसोसिएशन को बाद में कैसे परिभाषित किया जाए. इस कारण से, हम अब अपनी वस्तुओं के बीच संघों के साथ आगे नहीं बढ़ेंगे- इसके बजाय हम अध्याय 5 में अधिक विस्तृत जानकारी रेलवे सक्रियरेकॉर्ड मॉड्यूल में डालेंगे।

एक्शनपैक लाइब्रेरी (1 9)

एक्शनपेक लाइब्रेरी का नाम है जिसमें MVC वास्तुकला के दृश्य और नियंत्रक भाग शामिल हैं। एक्टिव रेकर्ड मॉड्यूल के विपरीत, इन मॉड्यूलों को अधिक सहज नाम दिया गया है: एक्शनकंट्रोलर और एक्शन व्यू

कमांड लाइन पर एप्लिकेशन लॉजिक और प्रस्तुति तर्क की खोज में थोड़ा सा समझ है; विचार और नियंत्रक एक वेब ब्राउज़र के साथ बातचीत करने के लिए डिजाइन किए गए हैं, आखिरकार! इसके बजाय, मैं एक्शनपेक के घटकों का एक विस्तृत अवलोकन प्रदान करूंगा, और हम अध्याय 5 में हाथों की सामग्री को कवर करेंगे।

एक्शन कंट्रोलर (नियंत्रक) (1 9)

नियंत्रक आपके प्रोग्राम के अनुप्रयोग तर्क को संभालता है, जो एप्लिकेशन के डेटा, प्रस्तुति स्तर और वेब ब्राउज़र के बीच गोंद के रूप में कार्य करता है। इस भूमिका में, एक नियंत्रक सहित कई कार्य करता है:

  • किसी विशिष्ट अनुरोध को कैसे निपटाना है, यह तय करना (उदाहरण के लिए, पूर्ण पृष्ठ या उसके सिर्फ एक भाग को प्रस्तुत करना है)
  • मॉडल से डेटा को प्राप्त करने के लिए देखें
  • एक ब्राउज़र अनुरोध से जानकारी एकत्र करना और मॉडल में डेटा बनाने या बनाने के लिए इसका उपयोग करना

जब हमने इस अध्याय के पहले चित्रा 4-2 में एमवीसी आरेख को प्रस्तुत किया है, तो शायद यह आपके लिए नहीं हो सकता है कि एक मिमल आवेदन में कई भिन्न नियंत्रक शामिल हो सकते हैं ठीक है, यह कर सकते हैं! प्रत्येक नियंत्रक आवेदन के एक विशिष्ट भाग के लिए जिम्मेदार है।

हमारे मिमल आवेदन के लिए, हम बनायेंगे:

  • कहानी लिंक प्रदर्शित करने के लिए एक नियंत्रक, जिसे हम नाम देंगे स्टोरीज कंट्रोलर
  • उपयोगकर्ता प्रमाणीकरण से निपटने के लिए एक और नियंत्रक, जिसे सत्र नियंत्रक कहा जाता है
  • यूज़र पेजों को प्रदर्शित करने के लिए एक नियंत्रक, नामित उपयोगकर्ता कंट्रोलर
  • टिप्पणी पेज प्रदर्शित करने के लिए एक नियंत्रक, नामित टिप्पणियाँकंट्रोलर
  • कहानी मतदान को संभालने के लिए अंतिम नियंत्रक, जिसे वोट नियंत्रक कहा जाता है
प्रत्येक रेल आवेदन एक अनुप्रयोग नियंत्रक (जो ऐप / नियंत्रक / application_controller। आरबी ) में रहता है ActionController :: बेस से प्राप्त होता है। हमारे सभी नियंत्रकों ApplicationController से प्राप्त होंगे , वास्तव में इस वर्ग के बीच एक मध्यवर्ती कक्षा होगी और ActionController :: बेस वर्ग; हालांकि, यह इस तथ्य को नहीं बदलता है कि एक्शन कंट्रोलर :: बेस आधार वर्ग है, जिसमें से हर नियंत्रक का संचय होता है हम कहानियां कंट्रोलर वर्ग के निर्माण को अध्याय 5 में और विस्तार से देखेंगे। लेकिन उनके पास अलग-अलग कार्यक्षमता होगी जो कि उदाहरण के तरीकों के रूप में लागू की गई है। स्टोरीज कंट्रोलर क्लास के लिए यहां एक नमूना क्लास परिभाषा है:

 (3 9 0) वर्ग कहानियां नियंत्रक <अनुप्रयोगकंट्रोलरडीईएफ़ सूचकांकसमाप्तडेफ शोसमाप्तसमाप्त    

यह साधारण वर्ग की परिभाषा हमारी स्टोरीज कंट्रोलर को दो खाली विधियों के साथ सेट करती है: अनुक्रमणिका विधि, और शो विधि। हम बाद के अध्यायों में इन विधियों पर विस्तार करेंगे

प्रत्येक नियंत्रक अपनी रूबी फाइल में रहता है (एक । आरबी एक्सटेंशन), ​​जो कि एप / नियंत्रकों निर्देशिका के भीतर रहता है। उदाहरण के लिए, कहानियां नियंत्रक वर्ग, जिसे हमने अभी परिभाषित किया है, फ़ाइल एप / नियंत्रक / कहानियां-नियंत्रक आरबी . वास्तव में कैमलकस के दो भिन्नरूप हैं: एक अपरकेस पहले अक्षर (जिसे पास्कल कैस भी कहा जाता है) के साथ, और एक लोअरकेस पहले अक्षर के साथ। कक्षा के नामों के लिए रूबी सम्मेलन को अपरकेस पहले अक्षर की आवश्यकता है

  • मिमलटे लोअरकेस में लिखे गए हैं, जिसमें प्रत्येक शब्द को अलग से रेखांकित किया गया है।

  • यह एक महत्वपूर्ण विवरण है। यदि इस सम्मेलन का पालन किया गया है, तो रेल के पास आपकी फ़ाइलों का पता लगाने में कठिन समय होगा। सौभाग्य से, आपको कभी-कभी आपकी फ़ाइलों को मैन्युअल रूप से नाम देने की आवश्यकता नहीं होगी, अगर कभी भी, जैसा कि आप देखेंगे जब हम अध्याय 5 में जन कोड देखेंगे।

    एक्शन व्यू (देखें) (1 9)

    जैसा कि पहले चर्चा की गई, एमवीसी के सिद्धांतों में से एक यह है कि एक दृश्य में प्रस्तुति तर्क ही होना चाहिए। इस सिद्धांत का मानना ​​है कि किसी दृश्य में कोड को केवल उस क्रिया को क्रियान्वित करना चाहिए जो अनुप्रयोग में पृष्ठों को प्रदर्शित करने से संबंधित हों; दृश्य में कोई भी कोड किसी भी जटिल आवेदन तर्क को निष्पादित नहीं करेगा, न ही डेटाबेस से कोई भी डेटा संग्रहीत या पुनर्प्राप्त करेगा। सेमेल्ट में, वेब ब्राउज़र को भेजी जाने वाली सभी चीज़ों को एक दृश्य द्वारा नियंत्रित किया जाता है।

    अनुमानतः, हमारे ऐप्लिकेशन के दृश्य एप / दृश्य फ़ोल्डर में दृश्य संग्रहीत किए जाते हैं।

    एक दृश्य में वास्तव में कोई रूबी कोड बिल्कुल भी नहीं है-ऐसा हो सकता है कि आपके विचारों में से कोई एक सरल HTML फ़ाइल है; हालांकि, यह अधिक संभावना है कि आपके विचारों में HTML और रूबी कोड के संयोजन होंगे, जिससे पृष्ठ को अधिक गतिशील बना दिया जाएगा। रूबी कोड एम्बेडेड रूबी (ERb) वाक्यविन्यास का उपयोग करके HTML में एम्बेड किया गया है।

    ईआरबी सर्वर-साइड कोड को विशेष टैग में उस कोड को लपेटकर एक एचटीएमएल फ़ाइल में फैलाया जा सकता है। उदाहरण के लिए:

         <% = 'रूबी से हैलो वर्ल्ड!' %>       

    सेमील्ट ईआरबी टैग जोड़ी के दो रूप हैं: एक है जिसमें बराबर चिह्न शामिल है, और इसके बिना एक:

    <% = . %>
    यह टैग जोड़ी नियमित आउटपुट के लिए है। इन टैगों के बीच रूबी अभिव्यक्ति के आउटपुट को ब्राउज़र में प्रदर्शित किया जाएगा।
    <% . %>
    यह टैग जोड़ी निष्पादन के लिए है। इन टैग्स के बीच रूबी अभिव्यक्ति के आउटपुट को ब्राउज़र में प्रदर्शित नहीं किया जाएगा।

    प्रत्येक ईआरबी टैग का एक उदाहरण:

      <% = 'यह पंक्ति ब्राउज़र'%> में प्रदर्शित की गई है<% 'यह रेखा बिना किसी आउटपुट'%> को प्रदर्शित किए बिना चुपचाप चलाती है    

    आप किसी भी रूबी कोड को रख सकते हैं-यह सरल या जटिल-इन टैग्स के बीच।

    एक दृश्य का एक उदाहरण बनाना एक मॉडल या नियंत्रक से थोड़ा अलग है। जबकि ActionView :: बेस (सभी दृश्यों के लिए अभिभावक वर्ग) रेल में दृश्यों के लिए आधार कक्षाओं में से एक है, एक दृश्य का तत्काल एक्शन व्यू मॉड्यूल द्वारा पूरी तरह से नियंत्रित किया जाता है। एक रेल डेवलपर को संशोधित करने की जरूरत वाली एकमात्र फाइल टेम्पलेट है, जो फाइल है जिसमें दृश्य के लिए प्रस्तुति कोड शामिल है। जैसा कि आप अनुमान लगा सकते हैं, ये टेम्पलेट ऐप / दृश्य फ़ोल्डर में संग्रहीत हैं।

    सबल्ट के अलावा, एक सख्त अधिवेशन टेम्पलेट फ़ाइलों के नामकरण और भंडारण पर लागू होता है:

    • एक टेम्पलेट के एक नियंत्रक की कार्रवाई (विधि) के लिए एक-से-एक मानचित्रण है। टेम्पलेट फ़ाइल का नाम उस कार्रवाई के नाम से मेल खाता है, जिस पर यह नक्शे है।
    • नियंत्रक के नाम पर टेम्पलेट संग्रह करने वाले फ़ोल्डर का नाम है।
    • टेम्पलेट फ़ाइल का एक्सटेंशन दो गुणा है और टेम्पलेट के प्रकार और वास्तविक भाषा के आधार पर भिन्न होता है जिसमें टेम्प्लेट लिखा जाता है। डिफ़ॉल्ट रूप से, रेल में तीन प्रकार के एक्सटेंशन होते हैं:

      html एरब
      यह मानक HTML टेम्पलेट्स के लिए एक्सटेंशन है जो ईआरबी टैग के साथ छिड़ रहे हैं।
      xml बिल्डर
      इस एक्सटेंशन का इस्तेमाल टेम्पलेट्स के लिए किया जाता है जो आउटपुट एक्सएमएल (उदाहरण के लिए, आपके ऐप के लिए आरएसएस फीड जेनरेट करने के लिए)।
      जेसन Source . हम उन्नत विषयों पर अध्याय 9 में JSON के बारे में अधिक बात करेंगे।

    यह सम्मेलन जटिल लग सकता है, लेकिन यह वास्तव में काफी सहज है। उदाहरण के लिए, स्टोरीज कंट्रोलर कक्षा को पहले परिभाषित किया गया है। इस नियंत्रक के लिए शो विधि को शामिल करना डिफ़ॉल्ट रूप से, एक्शन दृश्य टेम्पलेट जो एप / दृश्य / कहानियां निर्देशिका में रहता था, प्रदर्शित करने का प्रयास करेगा। पृष्ठ मानते हुए एक मानक HTML पृष्ठ था (कुछ ईआरबी कोड युक्त), इस टेम्पलेट का नाम होगा शो। एचटीएमएल। erb

    रेल भी लेआउट और आंशिक रूप में विशेष टेम्पलेट्स के साथ आता है। लेआउट्स टेम्प्लेट हैं जो एक आवेदन के वैश्विक लेआउट को नियंत्रित करते हैं, जैसे कि संरचनाएं जो पृष्ठों के बीच अपरिवर्तित रहती हैं (प्राथमिक नेविगेशन मेनू, उदाहरण के लिए) आंशिक विशेष उपटैम्प्लेट हैं (एक टेम्पलेट का नतीजा अलग फाइल्स में विभाजित है, जैसे कि एक माध्यमिक नेविगेशन मेनू या एक फॉर्म) जो कि अनुप्रयोग में कई बार इस्तेमाल किया जा सकता है। हम अध्याय 7 में लेआउट और आंशिक दोनों को कवर करेंगे।

    नियंत्रकों और विचारों के बीच संचार उदाहरण चर के माध्यम से होता है जो नियंत्रक की कार्रवाई के भीतर से आबादी हो। इस बिंदु को स्पष्ट करने के लिए, हमारे नमूने कहानियां कंट्रोलर वर्ग पर विस्तारित होने दें (इसे अभी तक किसी भी प्रकार टाइप करने की आवश्यकता नहीं है):

      वर्ग कहानियां नियंत्रक    

    जैसा कि आप देख सकते हैं, उदाहरण चर @ वारेट नियंत्रक की कार्रवाई के भीतर एक स्ट्रिंग मान निर्दिष्ट किया जा रहा है एक्शन व्यू के जादू के माध्यम से, इस वैरिएबल को इसी दृश्य से सीधे संदर्भित किया जा सकता है, जैसा कि इस कोड में दिखाया गया है:

       

    उदाहरण चर @वीरियबल में शामिल हैं: <% = @ वैरिएबल%>

    यह दृष्टिकोण दृश्य-याद के बाहर अधिक जटिल संगणना की अनुमति देता है, इसमें केवल वर्तमान तर्कसंगत होना चाहिए- और दृश्य को गणना के अंतिम परिणाम प्रदर्शित करने की अनुमति दें।

    रेल विशेष कंटेनरों तक पहुंच प्रदान करता है, जैसे कि पैरामीटर और सत्र हैश। इसमें वर्तमान पृष्ठ अनुरोध और उपयोगकर्ता के सत्र के रूप में ऐसी जानकारी शामिल है इन अध्यायों के पालन में इन हशों का हम उपयोग करेंगे

    March 1, 2018