如何在Ruby中抑制数组上的.each循环的输出?

时间:2014-02-12 20:33:23

标签: ruby ruby-on-rails-4

我一直在搜索,似乎找不到有类似问题的人。 我正在研究Michael Hartle的RoR教程,我发现了一个奇怪的问题。我一直在跟踪他对T的指示,除了Rails 4和Ruby 2.1与他正在使用的旧版本不同。 如果用户尝试使用错误数据注册时返回错误,则会创建一个包含的erb文件,标题为_error_messages.html.erb 这是文件的代码:

<% if @user.errors.any? %>
 <div class="error_explanation round padding_10">
   <h3 class="error_explanation">
     <%= pluralize(@user.errors.count, "error") %>
     prohibited this user from being saved:
   </h3>
   <p>There were problems with the following fields:</p>
   <ul>
   <%= @user.errors.full_messages.each do |msg| %>
     <li><%= msg %></li>
   <% end %>
   </ul>
 </div>
<% end %>
<br />

现在,当他执行这段代码时,他会得到你所期望的。在User.new尝试无效之后由@user对象指定的无序错误列表。

然而,我得到的输出 - 实际的HTML - 是:

<div class="error_explanation round padding_10">
   <h3 class="error_explanation">
     2 errors
     prohibited this user from being saved:
   </h3>
   <p>There were problems with the following fields:</p>
   <ul>

     <li>Password can&#39;t be blank</li>

     <li>Password is too short (minimum is 6 characters)</li>
[&quot;Password can&#39;t be blank&quot;, &quot;Password is too short (minimum is 6 characters)&quot;]   </ul>
 </div>
<br />

正如你所看到的,我正在获得额外奖金的预期输出。还输出了完整的错误数组:[&quot;Password can&#39;t be blank&quot;, &quot;Password is too short (minimum is 6 characters)&quot;]

我已经看了一些抑制的建议 - 我已经尝试了我能想到的每一种排列,例如:

@user.errors.full_messages.each;nil do |msg|
#and
@user.errors.full_messages.each do;nil |msg|
#and
@user.errors.full_messages.each do |msg|;nil
#and
end;nil

我发现语法不正确并不奇怪。 我错过了什么?为什么全阵列转储? 感谢任何伸出援手的人 - 这是相当令人沮丧的。

1 个答案:

答案 0 :(得分:6)

从第=行中删除<%= @user.errors.full_messages.each do |msg| %>。就是这样。