从我的.each循环中获取一个流氓迭代

时间:2012-01-22 17:41:52

标签: ruby-on-rails ruby

我只是在轨道上学习ruby并大致遵循本指南:http://guides.rubyonrails.org/getting_started.html

我在成就结果上有这个循环(指南示例中的注释):

<h2>Completed results (<%= @achievement.achievement_results.count %>)</h2>
<% @achievement.achievement_results.each do |result| %>
<p>
    <b>ID:</b>
    <%= result.id %>
</p>
<p>
    <b>Success:</b>
    <%= result.success %>
</p>
<p>
    <b>User:</b>
    <%= result.user_id %>
</p>
<p><%= link_to 'Delete', [result.achievement, result], confirm: 'Are you sure?', method: :delete %></p>
<hr/>
<% end %>

这是在成就的展示视图中,当我加载该视图时,我看到循环的额外迭代,其结果字段为空值。即使数组为[](使用rails控制台检查以确保数组为空),也会发生这种情况。

成就模式:

class Achievement < ActiveRecord::Base
  has_many :achievement_results, :dependent => :destroy
end

1 个答案:

答案 0 :(得分:4)

你是否有某个行(例如@achievement.achievement_results.build在某处被调用(可能是控制器,或者在某个地方?)。这可以解释为什么count返回不同的数字(因为count没有像size那样缓存)以及为什么值为空。

如果您确实拥有该行,则将其更改为AchievementResults.new(:achievement => @achievement)可能会将您排除在外。