为什么在do循环中为'nil:NilClass'获取'undefined method`> ='?

时间:2013-09-18 22:10:46

标签: ruby-on-rails loops erb rails-activerecord

我有以下数据架构:

  :tplangroups has_many :tplans

  :tplans belongs_to :tplangroups

  :tplans has attr_accessible :favrank

我需要从每个tplangroup获得具有最高favrank的tplan的id,下面的例程是我试图实现的:

    <% @tplangroups.each_with_index do |tplangroup, index| %>
        <% @highest_favrank = 0 %>
        <% @highest_id = tplangroup.tplans[0] %>
        <% tplangroup.tplans.each do |tplan| %>  
            <% if tplan.favrank >= @highest_favrank %>
                <% @highest_favrank = tplan.favrank %>
                <% @highest_id = tplan.id %>
            <% end %>
        <% end %>
     #does stuff with tplangroup
     <% end %>

但是,我一直收到以下错误:

    undefined method `>=' for nil:NilClass

有什么想法吗?我真的不知道为什么它会抛出这个错误。我知道我引用的所有属性/变量都有值,我已经测试了这个。我不确定我哪里出错了,先谢谢!

1 个答案:

答案 0 :(得分:2)

错误信息非常明显:您的tplan.favrank为零,Ruby无法使用>=@highest_favrank进行比较。

您应该在尝试使用compact显示之前删除该数组中的nils,否则您应该弄清楚为什么会得到nil。

不幸的是,我们无法告诉您,因为您没有提供显示值如何创建的代码,也没有数据我们可以尝试重新创建您的结构。

也许你的桌子有零值?也许你的代码没有捕获所有条件,允许nils泄漏。