Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Ruby टेम्पलेटिंग में महारत: ERB, HAML, और Slim समझाया गया

ERB एक टेम्पलेटिंग इंजन है।

एक टेम्पलेटिंग इंजन आपको HTML और Ruby को मिलाने की अनुमति देता है ताकि आप अपने डेटाबेस से डेटा का उपयोग करके वेब पेज उत्पन्न कर सकें।

ERB व्यूज रेंडर करने के लिए Rails का डिफ़ॉल्ट इंजन है।

नोट: Rails Ruby स्टैंडर्ड लाइब्रेरी से ERB क्लास के बजाय erubi नामक एक कार्यान्वयन का उपयोग करता है।

जैसा कि आप इस लेख में बाद में सीखेंगे, ERB का उपयोग करने के लिए आपको Rails की आवश्यकता नहीं है।

लेकिन पहले:

ERB के सिंटैक्स का परिचय, अपने Ruby प्रोजेक्ट्स में ERB का उपयोग कैसे करें और यह अन्य टेम्पलेटिंग इंजन्स जैसे HAML से कैसे तुलना करता है।

चलिए शुरू करते हैं!

एम्बेडेड Ruby (ERB) ट्यूटोरियल

एक ERB टेम्पलेट एक फाइल है जो .html.erb या .erb एक्सटेंशन के साथ समाप्त होती है।

ERB टेम्पलेट के अंदर आप जो कुछ भी लिखते हैं वह HTML होता है।

जब तक... आप एक विशेष टैग का उपयोग नहीं करते!

यहां एक उदाहरण है:

 

Hello <%= name %>!

यह <%= %> टैग टेम्पलेटिंग इंजन द्वारा अंदर के Ruby कोड का मूल्यांकन करके प्रतिस्थापित किया जाएगा।

यह स्ट्रिंग इंटरपोलेशन की तरह है!

<%= %> में इक्वल्स साइन पर ध्यान दें।

यह ERB को बताता है कि इस टैग की सामग्री को रेंडर करें।

यदि आप ERB में लूप या if स्टेटमेंट लिखना चाहते हैं तो आप इक्वल्स साइन को छोड़ देना चाहेंगे ताकि ERB उन चीजों को रेंडर न करे जिनकी आपको आवश्यकता नहीं है।

यदि आप सही ERB टैग का उपयोग नहीं करते हैं तो आपको त्रुटि भी मिल सकती है।

यहां एक उदाहरण है:

 <% if @favorite_food == "chocolate" %> Are you a chocolate lover? Here are some of our best PREMIUM chocolate bars! <% else %> Here are our top 10 snacks that people bought this month. <% end %> 

यह एक ERB if स्टेटमेंट है, जैसे एक नियमित Ruby if स्टेटमेंट लेकिन विशेष टेम्पलेटिंग सिंटैक्स में लपेटा गया ताकि जब यह पेज उपयोगकर्ता के लिए रेंडर हो तो इसका मूल्यांकन किया जा सके और आउटपुट द्वारा प्रतिस्थापित किया जा सके।

यहां एक ERB लूप है:

 <% @books.each do |book| %> <%= book.title %> <%= book.author %> 
<% end %>

बुक्स की एक सरणी दिए जाने पर, यह प्रत्येक बुक को उनके बीच एक लाइन ब्रेक के साथ प्रिंट करेगा।

यदि आप Rails का उपयोग कर रहे हैं, तो यह आपके लिए इस टेम्पलेट को रेंडर करेगा जब आप संबंधित कंट्रोलर एक्शन को कॉल करेंगे।

Rails के बिना ERB का उपयोग करना

यदि आप रिपोर्ट और स्टेटिक वेबसाइट्स बनाने के लिए Rails के बाहर ERB का उपयोग करना चाहते हैं...

आप यह कर सकते हैं:

 require 'erb' Book = Struct.new(:title, :author) template = ERB.new(File.read('template.erb')) template.result_with_hash(books: [Book.new("test"), Book.new("abc")]) 

इसके काम करने के लिए आपको अपने टेम्पलेट में @books को books से बदलना होगा।

Rails "वेरिएबल बाइंडिंग" नामक एक मेटाप्रोग्रामिंग ट्रिक का उपयोग करता है।

यही तरीका है जिससे Rails आपके कंट्रोलर से इंस्टेंस वेरिएबल्स को आपके टेम्पलेट के साथ साझा करता है। लेकिन यदि आप Rails के बिना ERB का उपयोग करने जा रहे हैं तो हैश का उपयोग करना (result_with_hash मेथड के साथ) एक क्लीनर समाधान है।

आप क्या सोचते हैं?

टेम्पलेटिंग इंजन्स की तुलना

अब:

आइए विभिन्न टेम्पलेटिंग इंजन्स की तुलना करें।

आप Tilt जेम का उपयोग करके इन सभी इंजन्स तक पहुंच सकते हैं। Tilt, Faraday की तरह एक एडाप्टर जेम है।

उदाहरण:

 require 'tilt' Tilt::ErubiTemplate.new("test.erb").render require 'tilt/haml' Tilt::HamlTemplate.new("test.haml").render require 'slim' Slim::Template.new("test.slim").render 

यहां विभिन्न कार्यान्वयनों के बीच बेंचमार्क है:

 Comparison: erubi: 5786.0 i/s ERB: 4438.8 i/s - 1.30x slower Haml: 1340.0 i/s - 4.32x slower Slim: 724.1 i/s - 7.99x slower 

यहां HAML सिंटैक्स कैसा दिखता है:

 %head %title Ruby Templating Engines = 123 * 2 %body - foo.each do |bar| %p This Is Cool 

यह सादे HTML से अलग है, इसलिए आपको इसकी आदत डालनी होगी।

यहां तक कि अधिक संक्षिप्त Slim का सिंटैक्स है:

 head title Ruby Templating Engines = 123 * 2 body - foo.each do |bar| p | This Is Cool 

Slim मल्टी-लाइन कंटेंट ब्लॉक्स के लिए पाइप कैरेक्टर का उपयोग करता है, HAML में आपको इसकी आवश्यकता नहीं होती।

आइए GitHub रिपॉजिटरी लेवल पर तुलना देखें:

REPO STARS LAST_COMMIT LATEST_RELEASE CREATED_DATE
jeremyevans/erubi 255 2019-11-05 14:09:06 2019-09-25 15:44:36 2016-11-10 22:42:44
haml/haml 3461 2019-12-27 10:51:59 2019-08-06 12:01:09 2008-02-11 22:55:26
slim-template/slim 4898 2019-12-15 23:55:23 2018-09-02 23:54:10 2010-09-13 01:32:07

तो आपको किसका उपयोग करना चाहिए?

मुझे लगता है कि यह ज्यादातर व्यक्तिगत पसंद है।

लेकिन एक बात स्पष्ट है:

एक विशिष्ट प्रोजेक्ट के लिए एक चुनें और अपने सभी टेम्पलेट्स को उस इंजन का उपयोग करके लिखें।

मिक्स एंड मैच न करें।

मुझे ERB टेम्पलेट्स के साथ रहना पसंद है...

सही एडिटर स्निपेट्स और सपोर्ट के साथ यह इतना अधिक लिखना नहीं है।

आपके पास कन्वर्टर्स भी उपलब्ध हैं (ERB से/में) यदि आप कभी दूसरे इंजन पर जाना चाहते हैं।

सारांश

आपने Ruby में टेम्पलेटिंग इंजन्स के बारे में सीखा!

कृपया इस लेख को साझा करें और यदि आपने अभी तक सदस्यता नहीं ली है तो मेरे न्यूज़लेटर की सदस्यता लें (9000+ ग्राहक) ताकि आप इस तरह की और अधिक बढ़िया सामग्री प्राप्त कर सकें।

पढ़ने के लिए धन्यवाद 🙂


  1. ERB बनाम HAML बनाम Slim: कौन सा रूबी टेम्पलेटिंग इंजन चरम प्रदर्शन देता है? ERB बनाम HAML बनाम Slim: कौन सा रूबी टेम्पलेटिंग इंजन चरम प्रदर्शन देता है?

    इस लेख में, हम तीन सबसे लोकप्रिय रूबी टेम्पलेटिंग इंजनों के प्रदर्शन का परीक्षण और विश्लेषण करेंगे: ERB (डिफ़ॉल्ट), HAML, और SLIM। बेंचमार्किंग व्यावसायिक प्रक्रियाओं और प्रदर्शन मेट्रिक्स की तुलना अन्य कंपनियों के उद्योग सर्वोत्तम और सर्वोत्तम प्रथाओं से करने का अभ्यास है। इस बीच, लोड परीक्षण एक प्

  1. रूबी के साथ इंसर्शन सॉर्ट में महारत: एक चरण-दर-चरण गाइड रूबी के साथ इंसर्शन सॉर्ट में महारत: एक चरण-दर-चरण गाइड

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

  1. Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण

    Ruby का एक नया संस्करण नई सुविधाओं और प्रदर्शन सुधारों के साथ आ रहा है। क्या आप परिवर्तनों के साथ बने रहना चाहेंगे? आइए एक नज़र डालते हैं! अंतहीन रेंज (Endless Ranges) Ruby 2.5 और पुराने संस्करण पहले से ही अंतहीन रेंज का एक रूप (Float::INFINITY के साथ) का समर्थन करते हैं, लेकिन Ruby 2.6 इसे अगले स्त