首页 > 解决方案 > 如果块是内联或多行给出的,则 Rails 输出不同

问题描述

我很难找出我做错了什么或如何达到相同的结果。我要做的是在rails视图中打印数组@attributes。

这不起作用:

<% @attributes.each do |element| %>
<%= puts element.to_s %>
<% end %>

但这是:

<%= @attributes.each { |element| puts element.to_s }%>

我还尝试将所有内容放在 <%= %> 的第一条语句中,但没有成功。这两种说法不完全一样吗?

另外,如果您能帮助我-您将如何遍历数组并在每个项目后插入新行?

提前致谢!亚历克斯

标签: ruby-on-railsruby

解决方案


puts实际上并不输出到 ERB 缓冲区。它输出到 STDOUT 并返回 nil。如果你想遍历记录和输出,你可以这样做:

<% @attributes.each do |element| %>
  <%= element.to_s %>
<% end %>

ERB 标签将<%= %>表达式的返回值输出到缓冲区中。如果您想使用非打印 ERB 表达式执行此操作,则需要使用concat

<% @attributes.each { |element| concat element.to_s } %>

这两种说法不完全一样吗?

不,输出实际上与以下内容相同:

<% @attributes.each do |element| %>
  <%= nil %>
<% end %>

<%= @attributes %>

推荐阅读