<%= ...%>之间有什么区别?和<%...%>在Ruby on Rails中

时间:2012-06-28 15:02:43

标签: ruby-on-rails ruby ruby-on-rails-3

是否与输出有关?

因此,<%= ...code... %>用于在执行代码后输出,而<% ...code... %>仅用于执行代码?

3 个答案:

答案 0 :(得分:11)

这是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

答案 1 :(得分:4)

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

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

之外进行
<%= "<br />" if need_line_break %> <!-- Won't work -->

<% if need_line_break %>
<br />
<% end %> <!-- Will work -->

答案 2 :(得分:3)

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

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

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