跟输出有关系吗?
那么,<%= ...code... %>
是用于代码执行后的输出,<% ...code... %>
还是只用于执行代码?
跟输出有关系吗?
那么,<%= ...code... %>
是用于代码执行后的输出,<% ...code... %>
还是只用于执行代码?
这是ERB模板标记(Rails 支持的许多模板语言之一)。这个标记:
<% ... %>
用于评估 Ruby 表达式。然而,没有对那个表达式的结果做任何事情。相比之下,标记:
<%= ... %>
做同样的事情(运行其中的任何 Ruby 代码),但它调用to_s
结果并用结果字符串替换标记。
简而言之:
<% just run code %>
<%= run code and output the result %>
例如:
<% unless @items.empty? %>
<ul>
<% @items.each do |item| %>
<li><%= item.name %></li>
<% end %>
</ul>
<% end %>
相比之下,这里有一些与上述等价的 Haml 标记:
- unless @items.empty?
%ul
- @items.each do |item|
%li= item.name
两者都执行其中包含的 Ruby 代码。但是,不同之处在于它们如何处理表达式的返回值。<% ... %>
不会对价值做任何事情。<%= ... %>
将返回值输出到执行它的任何文档(通常是 a.erb
或.rhtml
文档)。
需要注意的是,<%= ... %>
将自动转义文本中包含的任何 HTML。如果要包含任何条件 HTML 语句,请在<% ... %>
.
<%= "<br />" if need_line_break %> <!-- Won't work -->
<% if need_line_break %>
<br />
<% end %> <!-- Will work -->
<%=
用于输出单个表达式的值,例如
<%= object.attribute %>
<%= link_to 'Link Title', link_path %>
while<%
用于执行任意 Ruby 代码。