我只是在学习ruby on rails并大致遵循本指南: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 %>

这是在show视图中的一个成就,当我加载这个视图时,我看到一个额外的循环迭代,结果字段的值为空。即使数组是[]时也会发生这种情况(使用rails控制台检查以确保数组是空的)。
成就模式:
class Achievement < ActiveRecord::Base
  has_many :achievement_results, :dependent => :destroy
end

最佳答案

您是否有一条线,比如@achievement.achievement_results.build被调用到某个地方(可能是控制器,或者以某种形式在某个地方?)。这将解释为什么count返回不同的数字(因为count不像size那样缓存)以及为什么值为空。
如果你有那条线,把它改成AchievementResults.new(:achievement => @achievement)可能会帮你解决问题。

关于ruby-on-rails - 从我的.each循环中获取流氓迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8963116/

10-11 03:01