Rails में रेंडरिंग क्या है?
रेंडरिंग आपके रूबी ऑन Rails एप्लिकेशन का अंतिम लक्ष्य है। आप एक व्यू रेंडर करते हैं, आमतौर पर .html.erb फाइलें, जिनमें HTML और रूबी कोड का मिश्रण होता है।
एक व्यू वही है जो उपयोगकर्ता देखता है।
यह आपके Rails ऐप द्वारा किए जाने वाले सभी काम का परिणाम है। व्यूज लॉजिक, डेटा और व्यू टेम्पलेट्स को मिलाकर उपयोगकर्ता के अनुरोध को पूरा करते हैं।
यहां तक कि JSON प्रतिक्रिया लौटाना भी एक व्यू माना जा सकता है।
यही कारण है कि Rails में रेंडरिंग सिस्टम के बारे में आप सब कुछ सीख सकते हैं यह महत्वपूर्ण है यदि आप नहीं चाहते कि आपका सारा काम बर्बाद हो जाए।
Rails में रेंडरिंग कुछ आश्चर्यजनक व्यवहार उत्पन्न कर सकता है। इसलिए जितना अधिक आप जानते हैं, उतना बेहतर।
आइए बुनियादी बातों से शुरू करते हैं!
व्यू रेंडरिंग की मूल बातें
डिफ़ॉल्ट रूप से, आपको Rails को कुछ भी रेंडर करने के लिए नहीं बताना पड़ता और व्यूज तब भी काम करेंगे जब तक सब कुछ सही ढंग से सेटअप है।
यह "कन्वेंशन ओवर कॉन्फिगरेशन" का हिस्सा है।
यह कैसे काम करता है?
खैर, Rails धारणाएं बनाता है, जिनसे आप अनजान हो सकते हैं।
यह आपका काम बचाता है।
लेकिन अगर आप नहीं जानते कि क्या हो रहा है तो यह जादू जैसा लग सकता है।
यहीं पर आप मुसीबत में पड़ सकते हैं!
इस विशेष मामले में, Rails जो धारणा बनाता है वह यह है कि आप उसी नाम के टेम्पलेट को रेंडर करना चाहते हैं जो कंट्रोलर एक्शन का नाम है जो अनुरोध को संभाल रहा है।
इसलिए यदि आप BooksController#index कॉल करते हैं... Rails books/index.erb रेंडर करता है।
अब:
आप इस रेंडरिंग पर अधिक नियंत्रण प्राप्त कर सकते हैं।
यह आपको डिफ़ॉल्ट से अलग व्यू रेंडर करने की अनुमति देता है।
यहाँ बताया गया है:
class BooksController < ApplicationController
def index
render :listing
end
end
यह books/listing.erb रेंडर करता है (या .haml यदि आप HAML व्यूज का उपयोग कर रहे हैं)।
आप सिंबल के बजाय एक स्ट्रिंग का उपयोग कर सकते हैं।
इस तरह:
render 'shared/buttons'
Rails shared/buttons.erb रेंडर करेगा।
एक बात जो आपको जाननी चाहिए
किसी अन्य एक्शन से जुड़े व्यू को रेंडर करने से वह एक्शन नहीं चलेगा।
दूसरे शब्दों में, create के अंदर render :index कॉल करने से index मेथड नहीं चलेगा।
यह महत्वपूर्ण क्यों है?
क्योंकि उस व्यू के लिए इंस्टेंस वेरिएबल सेट नहीं होंगे!
आपको उन्हें स्वयं सेट करना होगा।
उदाहरण:
def index @users = User.all end # यहां `@users` न होने से एरर या खाली इंडेक्स व्यू होगा # आप उस स्थिति में `redirect_to` का उपयोग कर सकते हैं, उस स्थिति में `index` चलेगा def create render :index end
रेंडरिंग में इससे कहीं अधिक है।
चलते रहें!
विभिन्न प्रकार की रेंडरिंग
टेम्पलेट रेंडर करने के अलावा आपके पास अन्य विकल्प हैं।
आप कर सकते हैं:
- HTML स्ट्रिंग रेंडर करें
- सादा टेक्स्ट स्ट्रिंग रेंडर करें
- JSON रेंडर करें
स्ट्रिंग रेंडर करना विकास के दौरान मददगार हो सकता है यदि आपके पास एरर को संभालने के लिए उचित टेम्पलेट नहीं है।
या यदि आप किसी विशेष कंट्रोलर एक्शन के लिए अपना व्यू लिखने के लिए तैयार नहीं हैं।
यहाँ एक उदाहरण है:
if @user render :show else render plain: "User not found." end
JSON सीधे रेंडर करना एक साधारण API बनाने के लिए इस्तेमाल किया जा सकता है, यह सबसे अच्छा तरीका नहीं है लेकिन यह आपको शुरू करने में मदद कर सकता है।
उदाहरण:
render json: @user
मैंने रेंडर HTML का उपयोग नहीं किया है, लेकिन अगर आपके पास इसके लिए कोई अच्छा उपयोग है तो मुझे बताएं!
पार्शियल्स कैसे रेंडर करें
रेंडरिंग कंट्रोलर्स से आगे जाती है।
आप व्यूज के भीतर व्यूज भी रेंडर कर सकते हैं।
हम उसे पार्शियल कहते हैं।
आप ऐसा क्यों करना चाहेंगे?
क्लीनर कोड और कोड रीयूज।
यदि आप 3 अलग-अलग पेजों पर एक ही फॉर्म का उपयोग कर रहे हैं तो उसे पार्शियल में निकालना एक अच्छा विचार हो सकता है।
अब जब आप बदलाव करना चाहते हैं तो आपको केवल एक जगह करना होगा।
यहाँ एक उदाहरण है:
<%= render :form %>
इसके काम करने के लिए आपको अपनी व्यू फाइल का नाम अंडरस्कोर से शुरू करना होगा, जैसे _form.erb, लेकिन जब आप render कॉल करते हैं तो आपको अंडरस्कोर की आवश्यकता नहीं होती।
आप पार्शियल्स से इंस्टेंस वेरिएबल्स एक्सेस कर पाएंगे...
लेकिन लोकल वेरिएबल्स का क्या?
आप यह कर सकते हैं:
<%= render :form, message: "Apples Are Good" %>
यह आपको अपने पार्शियल में message को लोकल वेरिएबल के रूप में एक्सेस देता है।
अगला:
आप सीखने जा रहे हैं कि केवल एक render कॉल से कई चीजें कैसे रेंडर करें!
कलेक्शन कैसे रेंडर करें
पार्शियल्स आपको लूप के बिना कलेक्शन रेंडर करने में मदद करते हैं।
मान लें कि आप @books रेंडर कर रहे हैं।
आप यह कर सकते हैं:
<%= render @books %>
यह काम करेगा यदि आपके पास _book.erb पार्शियल है और उस टेम्पलेट के अंदर book को अपने वेरिएबल के रूप में उपयोग करते हैं।
उदाहरण:
# app/views/books/_book.erb <%= image_tag(book.cover) %><%= book.title %>
<%= book.author %> <%= link_to "Read Book", book %>
यदि आपको वर्तमान बुक नंबर चाहिए (आपके CSS क्लासेस के लिए) तो आप book_counter का उपयोग कर सकते हैं।
जहाँ book_ आपके मॉडल का नाम है।
मुझे लगता है कि कलेक्शन रेंडरिंग मेरी पसंदीदा Rails फीचर्स में से एक है!
Rails लेआउट्स को समझना
जब आप एक नया Rails ऐप बनाते हैं तो यह व्यूज फोल्डर के तहत एक "layouts" फोल्डर के साथ आता है।
वहां आपको application.html.erb फाइल मिलेगी।
वह डिफ़ॉल्ट लेआउट है!
लेआउट क्या है?
एक लेआउट आपको अपनी साइट को एक सुसंगत रूप देता है।
यह है:
- मेनू
- फुटर
- CSS और Javascript फाइलों को लोड करना...
ज्यादातर समय डिफ़ॉल्ट लेआउट ठीक होता है।
लेकिन क्या होगा यदि आप किसी विशेष पेज के लिए अलग लेआउट चाहते हैं?
आप layout विकल्प का उपयोग कर सकते हैं।
उदाहरण:
render :index, layout: 'admin'
आप लेआउट को अक्षम कर सकते हैं:
render :index, layout: false
और आप कंट्रोलर लेवल पर लेआउट सेट कर सकते हैं।
इस तरह:
class AdminsController < ApplicationController layout 'admin' end
रेंडरिंग एक्शन को समाप्त नहीं करता
भ्रम का एक सामान्य बिंदु यह सोचना है कि कंट्रोलर एक्शन के अंदर रेंडरिंग (और रीडायरेक्टिंग) उसके बाद चलने वाले किसी भी कोड को रोक देगा।
आप इससे संपर्क में आ सकते हैं यदि आप render को कई बार कॉल करते हैं।
उदाहरण:
def create
if yellow_fruit?
render :bananas
end
render :apples
end
इसका परिणाम एरर होगा क्योंकि render :apples हमेशा चलता है और आप एक ही कंट्रोलर एक्शन में दो बार रेंडर नहीं कर सकते।
यहाँ समाधान है:
def create
if yellow_fruit?
render :bananas
else
render :apples
end
end
एक अन्य विकल्प return कीवर्ड का उपयोग render के बाद करना हो सकता है, लेकिन स्पष्टता के लिए, मेथड के बीच में return स्टेटमेंट्स से बचना सबसे अच्छा है जब भी संभव हो।
सारांश
आपने रूबी ऑन Rails में अति-महत्वपूर्ण विषय रेंडरिंग के बारे में सीखा है।
रेंडरिंग आपको अपने एप्लिकेशन के उपयोगकर्ताओं को कंटेंट वापस करने की अनुमति देता है और यह आपके कंट्रोलर एक्शन के अंदर अंतिम चरणों में से एक है। रेंडरिंग को समझना आपको बेहतर Rails एप्लिकेशन लिखने में मदद करता है।
अब आपकी बारी है, अपना एडिटर खोलें और अपने कोडिंग कौशल का अभ्यास करें।
पढ़ने के लिए धन्यवाद!