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

4

这与输出有关吗?

所以,<%= ...code... %>用于在代码执行后输出结果,而<% ...code... %>仅用于执行代码?


FYI:这是ERB(或Erubis)的格式,它是Rails使用的模板语言之一。如果您使用Haml进行模板设计,则永远不会看到这个。 - Phrogz
3个回答

12

这是Rails支持的众多模板语言之一ERB模板标记。此标记:

<% ... %>

用于评估 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

4

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

需要注意的是,<%= ... %> 会自动转义文本中包含的任何 HTML。如果您想包含任何条件性 HTML 语句,请在 <% ... %> 之外添加。

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

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

3

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

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

当使用<%时,可以执行任意的Ruby代码。


1
这是文档:ERB - Recognized Tags - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接