有人可以描述ERB文件中使用的以下字符的用法:
<% %>
<%= %>
<% -%>
<%# %>
每个人的用法是什么?
答案 0 :(得分:435)
<% %>
在括号内执行ruby代码。
<%= %>
将某些内容打印到erb文件中。
<% -%>
表达后避免换行。
<%# %>
在括号内注释掉代码;没有发送到客户端(而不是HTML注释)。
访问Ruby Doc了解有关ERB的更多信息。
答案 1 :(得分:85)
<% %>
和<%- and -%>
适用于任何Ruby代码,但不输出结果(例如if语句)。两者是一样的。
<%= %>
用于输出Ruby代码的结果
<%# %>
是ERB评论
这是一个很好的指南: http://api.rubyonrails.org/classes/ActionView/Base.html
答案 2 :(得分:46)
Rails默认不使用stdlib's ERB,它使用erubis。来源:this dev's comment,ActionView's gemspec,accepted merge request I did while writing this。
之间存在行为差异,尤其是连字符运算符%-
和-%
的工作原理。
文档很少,Where is Ruby's ERB format "officially" defined?所以接下来是实证结论。
所有测试都假设:
require 'erb'
require 'erubis'
何时可以使用-
-
传递给trim_mode
的{{1}}选项才能使用它。示例:
ERB.new
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
的作用:
ERB:删除下一个字符(如果是换行符)。
erubis:
-%
中{li> (没有<% %>
),=
没用,因为-
和<% %>
是相同的。 <% -%>
如果只包含空格,则删除当前行,否则不执行任何操作。
<% %>
中的(<%= -%>
):
示例:
=
# 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
的作用:
ERB:在标记之前和之前的换行符之后删除空格,但前提是只有空格。
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
%-
和-%
共同做什么
两种效果的确切组合分开。
答案 3 :(得分:6)
由于其含糊不清,我已添加了<%%
文字标记分隔符作为答案。这将告诉erb不要解释js应用程序所需的标签的<%
部分,例如显示chart.js工具提示等。
更新(修复损坏的链接)
现在可以在此处找到有关ERB的所有信息: https://puppet.com/docs/puppet/5.3/lang_template_erb.html#tags
答案 4 :(得分:4)
<% %>
:执行红宝石代码<%= %>
:打印到Erb文件中。或浏览器<% -%>
:避免在表达式后换行。 <%# %>
:ERB评论答案 5 :(得分:1)
这些用于轨道上的红宝石: -
&lt; %%&gt; : - 强>
&lt; %%&gt;标签用于执行不返回任何内容的Ruby代码,例如条件,循环或块。例如: -
<h1>Names of all the people</h1>
<% @people.each do |person| %>
Name: <%= person.name %><br>
<% end %>
&lt;%=%&gt; : - 强>
用于显示内容。
Name: <%= person.name %><br>
&lt;% - %&gt;: -
Rails扩展了ERB,因此只需在Rails模板中为标记添加尾部连字符就可以抑制换行
&lt;%#%&gt;: -
注释掉代码
<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>
答案 6 :(得分:1)
<% %>
执行其中的代码但不打印结果,例如:
我们可以在erb文件中将其用于if else。
<% temp = 1 %>
<% if temp == 1%>
temp is 1
<% else %>
temp is not 1
<%end%>
将打印temp is 1
<%= %>
执行代码并打印输出,例如:
我们可以打印rails变量的值。
<% temp = 1 %>
<%= temp %>
将打印1
<% -%>
没有任何区别,因为它不会打印任何内容,-%>
只对<%= -%>
有意义,这样可以避免换行。
<%# %>
将注释掉此中编写的代码。