जब आप शुरू से अंत तक अपने खुद के कार्यक्रम लिख रहे हैं, तो यह देखना आसान है प्रवाह नियंत्रण. कार्यक्रम यहां से शुरू होता है, वहां एक लूप है, विधि कॉल यहां हैं, यह सब दिखाई दे रहा है। लेकिन एक रेल आवेदन में, चीजें इतनी सरल नहीं हैं। किसी भी प्रकार के ढांचे के साथ, आप जटिल कार्यों को करने के लिए तेज या सरल तरीके के पक्ष में "प्रवाह" जैसी चीजों के नियंत्रण को त्यागते हैं। रूबी ऑन रेल्स के मामले में, प्रवाह नियंत्रण सभी को पर्दे के पीछे से संभाला जाता है, और आप सभी को छोड़ दिया जाता है (अधिक या कम) मॉडल, दृश्य और नियंत्रकों का एक संग्रह।
किसी भी वेब एप्लिकेशन के मूल में HTTP है। HTTP एक नेटवर्क प्रोटोकॉल है जिसका उपयोग आपका वेब ब्राउज़र किसी वेब सर्वर से बात करने के लिए करता है। यह वह जगह है जहाँ "अनुरोध," "GET" और "POST" जैसे शब्द आते हैं, वे इस प्रोटोकॉल की मूल शब्दावली हैं। हालाँकि, चूंकि रेल इस का एक अमूर्त हिस्सा है, हम इसके बारे में बात करने में ज्यादा समय नहीं देंगे।
जब आप एक वेब पेज खोलते हैं, तो एक लिंक पर क्लिक करें या एक वेब ब्राउज़र में एक फॉर्म सबमिट करें, ब्राउज़र टीसीपी / आईपी के माध्यम से एक वेब सर्वर से कनेक्ट होगा। ब्राउज़र तब सर्वर को एक "अनुरोध" भेजता है, इसे एक मेल-इन फॉर्म की तरह समझें जो ब्राउज़र एक निश्चित पृष्ठ पर जानकारी मांगने के लिए भरता है। सर्वर अंततः वेब ब्राउज़र को "प्रतिक्रिया" भेजता है। रेल पर रूबी वेब सर्वर नहीं है, हालांकि, वेब सर्वर वेब्रिक से कुछ भी हो सकता है (जब आप रेल सर्वर शुरू करते हैं तो आमतौर पर क्या होता है
कमांड लाइन) अपाचे एचटीडी (वेब सर्वर जो वेब के अधिकांश भाग को अधिकार देता है)। वेब सर्वर सिर्फ एक सुविधा है, यह अनुरोध लेता है और इसे आपके रेल एप्लिकेशन को सौंप देता है, जो प्रतिक्रिया उत्पन्न करता है और सर्वर पर वापस जाता है, जो बदले में इसे वापस भेजता है ग्राहक। तो अब तक का प्रवाह है:पहली बात एक रेल आवेदन एक अनुरोध के साथ करता है, इसे राउटर के माध्यम से भेजना है। प्रत्येक अनुरोध में एक URL होता है, यही वह है जो वेब ब्राउज़र के एड्रेस बार में दिखाई देता है। राउटर वह है जो निर्धारित करता है कि उस URL के साथ क्या किया जाना है, यदि URL समझ में आता है और यदि URL में कोई पैरामीटर है। राउटर को कॉन्फ़िगर किया गया है config / routes.rb.
सबसे पहले, यह जान लें कि राउटर का अंतिम लक्ष्य एक नियंत्रक और कार्रवाई के साथ एक URL से मेल खाता है (इन पर बाद में)। और चूंकि अधिकांश रेल एप्लिकेशन रेस्टफुल हैं, और रिस्टफुल एप्लिकेशन में संसाधनों का उपयोग करके प्रतिनिधित्व किया जाता है, आप लाइनों को देखेंगे संसाधन: पद विशिष्ट रेल अनुप्रयोगों में। यह URL से मेल खाता है /posts/7/edit पोस्ट नियंत्रक के साथ, संपादित करें 7 की आईडी के साथ पोस्ट पर कार्रवाई। राउटर सिर्फ यह तय करता है कि अनुरोध कहां जाएं। तो हमारे [रेल] ब्लॉक को थोड़ा विस्तारित किया जा सकता है।
अब जब राउटर ने यह तय कर लिया है कि किस कंट्रोलर को रिक्वेस्ट भेजनी है, और उस कंट्रोलर को किस एक्शन पर भेजना है। एक नियंत्रक संबंधित क्रियाओं का एक समूह है जिसे सभी एक वर्ग में एक साथ बांधा जाता है। उदाहरण के लिए, एक ब्लॉग में, ब्लॉग पोस्ट को देखने, बनाने, अपडेट करने और हटाने के लिए सभी कोड को एक साथ पोस्ट किया जाता है, जिसे "पोस्ट" कहा जाता है। क्रियाएं सामान्य हैं तरीकों इस वर्ग का। नियंत्रकों में स्थित हैं एप्लिकेशन / नियंत्रकों.
तो मान लीजिए कि वेब ब्राउज़र ने एक अनुरोध भेजा है /posts/42. राउटर तय करता है कि यह संदर्भित करता है पद नियंत्रक, प्रदर्शन विधि और दिखाने के लिए पोस्ट की आईडी है 42, तो यह कॉल करता है प्रदर्शन इस पैरामीटर के साथ विधि। प्रदर्शन विधि डेटा प्राप्त करने और आउटपुट बनाने के लिए दृश्य का उपयोग करने के लिए मॉडल का उपयोग करने के लिए ज़िम्मेदार नहीं है। तो हमारा विस्तारित [रेल] ब्लॉक अब है:
मॉडल समझने में सबसे सरल और लागू करने के लिए सबसे कठिन है। डेटाबेस के साथ सहभागिता के लिए मॉडल जिम्मेदार है। यह समझाने का सबसे सरल तरीका है मॉडल एक सरल विधि विधि कॉल है जो सादे रूबी वस्तुओं को लौटाता है जो डेटाबेस से सभी इंटरैक्शन (पढ़ता और लिखता है) को संभालता है। इसलिए ब्लॉग उदाहरण के बाद, एपीआई नियंत्रक मॉडल का उपयोग कर डेटा को पुनः प्राप्त करने के लिए उपयोग करेगा कुछ ऐसा दिखेगा Post.find (params [: id]). पैरामीटर वह क्या है जो URL से राउटर पर पोस्ट किया गया है, पोस्ट मॉडल है। यह SQL प्रश्न बनाता है, या ब्लॉग पोस्ट को पुनः प्राप्त करने के लिए जो कुछ भी आवश्यक है वह करता है। मॉडल में स्थित हैं एप्लिकेशन / मॉडल.
यह ध्यान रखना महत्वपूर्ण है कि सभी कार्यों को एक मॉडल का उपयोग करने की आवश्यकता नहीं है। मॉडल के साथ बातचीत केवल तभी आवश्यक है जब डेटा को डेटाबेस से लोड करने या डेटाबेस में सहेजने की आवश्यकता होती है। जैसे, हम अपने छोटे से फ्लोचार्ट में इसके बाद एक प्रश्न चिह्न लगा देंगे।
अंत में, यह कुछ HTML उत्पन्न करने का समय है। HTML को न तो नियंत्रक द्वारा नियंत्रित किया जाता है, न ही इसे मॉडल द्वारा नियंत्रित किया जाता है। एमवीसी ढांचे का उपयोग करने का मुद्दा सब कुछ कंपार्टमेंट करना है। डेटाबेस ऑपरेशन मोड में रहते हैं, HTML पीढ़ी दृश्य में रहती है, और नियंत्रक (राउटर द्वारा कहा जाता है) उन दोनों को कॉल करता है।
HTML आमतौर पर एम्बेडेड रूबी का उपयोग करके उत्पन्न होता है। यदि आप PHP से परिचित हैं, अर्थात PHP कोड के साथ HTML फ़ाइल इसमें एम्बेडेड है, तो एम्बेडेड रूबी बहुत परिचित होगा। ये दृश्य में स्थित हैं एप्लिकेशन / विचारों, और एक नियंत्रक आउटपुट उत्पन्न करने के लिए उनमें से एक को कॉल करेगा और इसे वेब सर्वर पर वापस भेज देगा। नियंत्रक द्वारा मॉडल का उपयोग करके प्राप्त किसी भी डेटा को आम तौर पर एक में संग्रहीत किया जाएगा उदाहरण चर जो, कुछ रूबी जादू के लिए धन्यवाद, दृश्य के भीतर से उदाहरण चर के रूप में उपलब्ध होगा। इसके अलावा, एम्बेडेड रूबी को HTML उत्पन्न करने की आवश्यकता नहीं है, यह किसी भी प्रकार का पाठ उत्पन्न कर सकता है। RSS, JSON, आदि के लिए XML बनाते समय आप इसे देखेंगे।
यह आउटपुट वेब सर्वर पर वापस भेजा जाता है, जो इसे वेब ब्राउज़र को वापस भेजता है, जो प्रक्रिया को पूरा करता है।