Jaka jest różnica między <%, <%=, <%# i - % > w ERB w Rails?

Czy ktoś może opisać użycie następujących znaków, które są używane w pliku ERB:

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

Jaki jest użytek z każdego z nich ?

Author: simo, 2011-11-03

7 answers

<% %>

Wykonuje kod ruby w nawiasach.

<%= %>

Wypisuje coś do pliku erb.

<% -%>

Unika łamania linii po wyrażeniu.

<%# %>

Komentuje kod w nawiasach; nie jest wysyłany do Klienta (w przeciwieństwie do komentarzy HTML).

Odwiedź Ruby Doc aby uzyskać więcej informacji o ERB.

 402
Author: auralbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-27 20:51:37

<% %> i <%- and -%> są dla dowolnego kodu Ruby, ale nie wypisują wyników (np. poleceń if). te dwa są takie same.

<%= %> jest do wyprowadzania wyników kodu Ruby

<%# %> is an ERB comment

Oto dobry przewodnik: http://api.rubyonrails.org/classes/ActionView/Base.html

 81
Author: yalestar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-02 10:09:21

Rails nie używa , Nie używa ERB stdlib domyślnie używa erubis }. Źródło: ten komentarz Deva, GEMSPEC ActionView, zaakceptowałem prośbę o scalenie, którą zrobiłem podczas pisania tego .

Istnieją między nimiróżnice w zachowaniu, w szczególności dotyczące działania operatorów myślników %- i -%.

Dokumentacja jest ograniczona, gdzie jest" oficjalnie " zdefiniowany format ERB Rubiego? więc to, co następuje, to wnioski empiryczne.

Wszystkie testy zakładają:

require 'erb'
require 'erubis'

Kiedy można użyć -

  • ERB: musisz przejść - do trim_mode opcja ERB.new aby go użyć.
  • erubis: domyślnie włączone.

Przykłady:

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

Co -% robi:

  • ERB: usuwa następny znak, jeśli jest to nowy wiersz.

  • Erubis:

    • W <% %> (BEZ =), - jest bezużyteczny, ponieważ <% %> i <% -%> są takie same. <% %> usuwa bieżącą linię, jeśli zawiera tylko spacje i nie robi nic innego.

    • W <%= -%> (z =):

      • usuń całą linię, jeśli zawiera tylko spacje
      • w przeciwnym razie, jeśli przed znacznikiem jest spacja, a po nim tylko whitesapces, Usuń białe znaki, które pojawiają się po
      • else, there is a non-space after the tag: do nic

Przykłady:

# 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

Co %- robi:

  • ERB: usuwa białe spacje przed znacznikiem i po poprzednich znakach nowej linii, ale tylko wtedy, gdy są tylko białe spacje przed.

  • Erubis: bezużyteczny, ponieważ <%- %> jest tym samym co <% %> (BEZ =), a to nie może być użyte z =, co jest jedynym przypadkiem, w którym -% może być użyteczne. Więc nigdy nie używaj to.

Przykłady:

# 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

Co %- i -% robią razem

Dokładna kombinacja obu efektów osobno.

 42
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:48

Dodałem <%% dosłowny ogranicznik znaczników jako odpowiedź na to pytanie z powodu jego zaciemnienia. Spowoduje to, że erb nie będzie interpretował <% części znacznika, która jest niezbędna dla aplikacji js, takich jak wyświetlanie wykresu.podpowiedzi js itp.

Wszystko o ERB można znaleźć tutaj: https://docs.puppet.com/puppet/latest/reference/lang_template_erb.html#tags

 5
Author: bkunzi01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-09 15:09:56

Są one używane w ruby on rails :-

:-

Znaczniki są używane do wykonywania kodu Ruby, który nie zwraca niczego, takiego jak warunki, pętle lub bloki. Eg: -

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

:-

Użyj do wyświetlenia zawartości .

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

:-

Rails rozszerza ERB, dzięki czemu można tłumić znak nowej linii, dodając myślnik końcowy do znaczników w szablonach Rails

:-

Skomentuj kod

<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>
 1
Author: HeadAndTail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-12 14:30:21
  • <% %>: wykonuje kod ruby
  • <%= %> : drukuje do pliku Erb. Or browser
  • <% -%>: unika łamania linii po wyrażeniu.
  • <%# %> : ERB komentarz
 1
Author: Neha Nakrani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-23 05:31:35

<% %> wykonuje tam kod, ale nie wypisuje wyniku, np.:
Możemy go użyć do if else w pliku erb.

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

Wydrukuje temp is 1


<%= %> wykonuje kod, a także wypisuje wyjście, np.:
Możemy wydrukować wartość zmiennej rails.

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

Wydrukuje 1


<% -%> nie ma to znaczenia, ponieważ nie drukuje niczego, -%> ma tylko sens z <%= -%>, uniknie to Nowego Kolejka


<%# %> skomentuje napisany w tym kodzie kod.

 0
Author: Aastha Kesarwani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-15 10:21:03