4

跟输出有关系吗?

那么,<%= ...code... %>是用于代码执行后的输出,<% ...code... %>还是只用于执行代码?

4

3 回答 3

12

这是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
于 2012-06-28T15:14:37.277 回答
4

两者都执行其中包含的 Ruby 代码。但是,不同之处在于它们如何处理表达式的返回值。<% ... %>不会对价值做任何事情。<%= ... %>将返回值输出到执行它的任何文档(通常是 a.erb.rhtml文档)。

需要注意的是,<%= ... %>将自动转义文本中包含的任何 HTML。如果要包含任何条件 HTML 语句,请在<% ... %>.

<%= "<br />" if need_line_break %> <!-- Won't work -->

<% if need_line_break %>
<br />
<% end %> <!-- Will work -->
于 2012-06-28T15:15:42.257 回答
3

<%=用于输出单个表达式的值,例如

<%= object.attribute %>
<%= link_to 'Link Title', link_path %>

while<%用于执行任意 Ruby 代码。

于 2012-06-28T15:05:51.813 回答