我只是在轨道上学习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
答案 0 :(得分:4)
你是否有某个行(例如@achievement.achievement_results.build
在某处被调用(可能是控制器,或者在某个地方?)。这可以解释为什么count
返回不同的数字(因为count
没有像size
那样缓存)以及为什么值为空。
如果您确实拥有该行,则将其更改为AchievementResults.new(:achievement => @achievement)
可能会将您排除在外。