पटरियों में ERB में <%, <% =, <% # और -%> के बीच अंतर क्या है?


368

क्या कोई कृपया निम्नलिखित वर्णों के उपयोग का वर्णन कर सकता है, जिनका उपयोग ERB फाइल में किया गया है:

<%   %>
<%=  %>
<%  -%>
<%#  %>

हर एक का क्या उपयोग है?


1
आपको यहाँ कुछ बेहतरीन उत्तर मिले हैं। यह भी ध्यान दें कि Haml अक्सर ERb का एक बेहतर विकल्प है।
मार्नेन लाइबो-कोसर

1
हां, ERB
simo


@Ciro Santilli: उम्र के बावजूद, यह आपके संदर्भों से अधिक पूर्ण लगता है। मैं इस एक के रूप में उन लोगों को बंद करने के लिए मतदान कर रहा हूँ ..
ब्रैड वर्थ

<%= %>और <%= -%>अलग-अलग हैं: केवल उत्तरार्द्ध पीछे चल रहे व्हाट्सएप को हटाता है।
दिव्यांग

जवाबों:


476
<% %>

कोष्ठक के भीतर माणिक कोड निष्पादित करता है।

<%= %>

एरब फाइल में कुछ प्रिंट करता है।

<% -%>

अभिव्यक्ति के बाद अवॉइड्स लाइन ब्रेक।

<%# %>

कोष्ठक के भीतर टिप्पणियाँ टिप्पणियाँ; क्लाइंट को नहीं भेजा गया (HTML टिप्पणियों के विपरीत)।

ERB के बारे में अधिक जानकारी के लिए रूबी डॉक्टर पर जाएँ ।


17
मैं कहीं और इस प्रकार के कोड में मिला हूं <% ==%> क्या किसी को पता है कि यह क्या है?

38
डबल बराबर का मतलब है कि स्ट्रिंग बच नहीं है, जैसे कि कच्चे में।
रिचर्ड_जी

7
रेल्स स्टडलिब ईआरबी का उपयोग नहीं करता है: यह एरूबिस का उपयोग करता है: github.com/rails/rails/issues/16766#issuecomment-54148778
Ciro Santilli 郝海东 the the 法轮功 法轮功 法轮功 法轮功

3
लेकिन ... लेकिन ... इसके ठीक बाद रूबी की टिप्पणी के साथ <%#एक सामान्य है .... हाँ, यह सोचने के लिए मज़ेदार है कि यह कुछ विशेष है, लेकिन क्या यह केवल एक विशेष वाक्यात्मक निर्माण के बजाय एक ईआरबी मुहावरा नहीं है? <%#
BalinKingOfMoria

6
@QPaysTaxes खेद है कि के बारे में, आप सही है ... उदाहरण के लिए, यदि आप बहु ERB है <%...%>, <%#...%>बाहर की टिप्पणियां सब इसके बारे में, अगर यह था सिर्फ एक सामान्य टिप्पणी (जो ऐसा नहीं होता यानी यह केवल बाहर लाइन टिप्पणी की चालू है)।
BalinKingOfMoria

86

<% %>और <%- and -%>किसी भी रूबी कोड के लिए हैं, लेकिन परिणामों को आउटपुट नहीं करता है (उदाहरण यदि कथन)। दो समान हैं।

<%= %> रूबी कोड के परिणामों के आउटपुट के लिए है

<%# %> एक ERB टिप्पणी है

यहाँ एक अच्छा गाइड है: http://api.rubyonrails.org/classes/ActionView/Base.html


मैं नहीं देखता कि <%-अग्रणी व्हॉट्सएप के लिए उद्घाटन कुछ भी करता है, और मैं इसे कहीं भी प्रलेखित नहीं देखता हूं। क्या अापको उस बारे में पूर्ण विशवास है? शायद यह ईआरबी का एक अलग स्वाद है। Stdlib डॉक्स पर इसके लिए कोई विकल्प नहीं दिखाया गया है।
एंड्रयू विट

1
@AndrewVit - इस उत्तर में संदर्भित पृष्ठ से (ActionView :: Base डॉक्स पेज): "<% - और -%> अनुगामी न्यूलाइन सहित प्रमुख और अनुगामी व्हाट्सएप को दबाते हैं, और <% और%> के साथ परस्पर उपयोग किया जा सकता है। "
अर्ल जेनकिंस

5
<% =%> के लिए प्रमुख व्हाट्सएप को कैसे दबाएं?
बोगदान गुसिएव

51

रेल डिफ़ॉल्ट रूप से stdlib के ERB का उपयोग नहीं करता है , यह एरबिस का उपयोग करता है । सूत्रों का कहना है: इस देव की टिप्पणी , ActionView के रत्न , इस अनुरोध को स्वीकार करते हुए मैंने इसे लिखा

वहाँ रहे हैं कैसे हाइफन ऑपरेटरों पर उन दोनों के बीच व्यवहार मतभेद, विशेष रूप से %-और -%काम करते हैं।

प्रलेखन दुर्लभ है, रूबी का ईआरबी प्रारूप "आधिकारिक तौर पर" कहां परिभाषित किया गया है? तो क्या निम्नलिखित अनुभवजन्य निष्कर्ष हैं।

सभी परीक्षण मान लेते हैं:

require 'erb'
require 'erubis'

जब आप उपयोग कर सकते हैं -

  • ईआरबी: आपको इसका उपयोग -करने के trim_modeविकल्प के पास होना चाहिए ERB.new
  • erubis: डिफ़ॉल्ट रूप से सक्षम।

उदाहरण:

begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end
ERB.new("<%= 'a' -%>\nb"  , nil, '-') .result == 'ab'  or raise
Erubis::Eruby.new("<%= 'a' -%>  \n b").result == 'a b' or raise

क्या -%करता है:

  • ईआरबी: अगला चरित्र हटा दें यदि यह एक नई रेखा है।

  • erubis:

    • में <% %>(बिना =), -बेकार है क्योंकि है <% %>और <% -%>एक ही हैं। <% %>वर्तमान लाइन को हटा देता है यदि इसमें केवल व्हाट्सएप हो, और अन्यथा कुछ भी न हो।

    • में <%= -%>(साथ =):

      • पूरी लाइन को हटा दें यदि इसमें केवल व्हाट्सएप हो
      • और, अगर टैग से पहले कोई गैर-स्थान है, और उसके बाद केवल व्हाट्सएप, उसके बाद आने वाले व्हाट्सएप को हटा दें
      • और, टैग के बाद एक गैर-स्थान है: कुछ भी न करें

उदाहरण:

# Remove
ERB.new("a \nb <% 0 -%>\n c", nil, '-').result == "a \nb  c" or raise

# Don't do anything: not followed by newline, but by space:
ERB.new("a\n<% 0 -%> \nc", nil, '-').result == "a\nb \nc" or raise

# Remove the current line because only whitesapaces:
Erubis::Eruby.new(" <% 0 %> \nb").result == 'b' or raise

# Same as above, thus useless because longer.
Erubis::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise

# Don't do anything because line not empty.
Erubis::Eruby.new("a <% 0 %> \nb").result == "a  \nb" or raise
Erubis::Eruby.new(" <% 0 %> a\nb").result == "  a\nb" or raise
Erubis::Eruby.new(" <% 0 -%> a\nb").result == "  a\nb" or raise

# Don't remove the current line because of `=`:
Erubis::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise

# Remove the current line even with `=`:
Erubis::Eruby.new(" <%= 0 -%> \nb").result == " 0b"   or raise

# Remove forward only because of `-` and non space before:
Erubis::Eruby.new("a <%= 0 -%> \nb").result == "a 0b"   or raise

# Don't do anything because non-whitespace forward:
Erubis::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb"   or raise

क्या %-करता है:

  • ईआरबी: टैग से पहले और पिछली नई लाइनों के बाद व्हाट्सएप को हटा दें, लेकिन केवल पहले व्हाट्सएप होने पर ही।

  • erubis: बेकार क्योंकि (बिना ) <%- %>के समान है , और इसका उपयोग नहीं किया जा सकता है जिसके साथ एकमात्र मामला है जहां उपयोगी हो सकता है। इसलिए कभी भी इसका उपयोग न करें।<% %>==-%

उदाहरण:

# Remove
ERB.new("a \n  <%- 0 %> b\n c", nil, '-').result == "a \n b\n c" or raise

# b is not whitespace: do nothing:
ERB.new("a \nb  <%- 0 %> c\n d", nil, '-').result == "a \nb   c\n d" or raise

क्या %-और -%एक साथ क्या करते हैं

दोनों प्रभावों का अलग-अलग संयोजन।


1
दूसरी पंक्ति में आपने लिखा है कि रेल erubis से लिंक करते समय eruby का उपयोग करता है।
डैनियल जोंसन

1
@DanielJonsson रिपोर्ट के लिए धन्यवाद: यह इरूबिस होना था। इतने सारे संस्करणों के साथ पागल हो रहा है। अपडेट किया गया।
सिरो सेंटिल्ली 郝海东 i iro i 法轮功 '11

10
  • <% %> : रूबी कोड निष्पादित करता है
  • <%= %>: एरब फाइल में प्रिंट करता है। या ब्राउज़र
  • <% -%> : अभिव्यक्ति के बाद अवॉइड्स लाइन ब्रेक।
  • <%# %> : ईआरबी टिप्पणी

7

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

अपडेट (फिक्स्ड टूटा लिंक)

ERB के बारे में सब कुछ अब यहाँ पाया जा सकता है: https://puppet.com/docs/puppet/5.3/lang_template_erb.html#tags


1
इस लिंक ने ओपी का सटीक उत्तर दिया
बेन टिंसले

लिंक अब टूट गया है
andreofthecape

नए लिंक के साथ अपडेट किया गया!
bkunzi01

3

ये रेल पर रूबी में उपयोग किया जाता है : -

<%%>: -

<%%> टैग का उपयोग रूबी कोड को निष्पादित करने के लिए किया जाता है जो कुछ भी वापस नहीं करता है, जैसे कि स्थिति, लूप या ब्लॉक। जैसे: -

<h1>Names of all the people</h1>
<% @people.each do |person| %>
  Name: <%= person.name %><br>
<% end %>

<% =%>: -

सामग्री प्रदर्शित करने के लिए उपयोग करें।

Name: <%= person.name %><br>

<% -%>: -

रेल ईआरबी का विस्तार करती है, ताकि आप रेल टेम्पलेट में टैग के लिए एक अनुगामी हाइफ़न जोड़कर नई लाइन को दबा सकें

<% #%>: -

कोड बाहर टिप्पणी करें

<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>

1

<% %>कोड को वहां निष्पादित करता है, लेकिन परिणाम को प्रिंट नहीं करता है, उदाहरण के लिए:
हम इसे एरब फाइल में किसी अन्य के लिए उपयोग कर सकते हैं।

<% temp = 1 %>
<% if temp == 1%>
  temp is 1
<% else %>
  temp is not 1
<%end%>  

छपेगा temp is 1


<%= %>कोड निष्पादित करता है और आउटपुट भी प्रिंट करता है, उदाहरण के लिए:
हम एक रेल चर के मूल्य को प्रिंट कर सकते हैं।

<% temp = 1 %>
<%= temp %>  

छपेगा 1


<% -%>इससे कोई फर्क नहीं पड़ता क्योंकि यह कुछ भी नहीं छापता है, -%>केवल समझ में आता है <%= -%>, यह एक नई रेखा से बचता है।


<%# %> इस के भीतर लिखे कोड पर टिप्पणी करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.