我有以下数据架构:
: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
有什么想法吗?我真的不知道为什么它会抛出这个错误。我知道我引用的所有属性/变量都有值,我已经测试了这个。我不确定我哪里出错了,先谢谢!
答案 0 :(得分:2)
错误信息非常明显:您的tplan.favrank
为零,Ruby无法使用>=
与@highest_favrank
进行比较。
您应该在尝试使用compact
显示之前删除该数组中的nils,否则您应该弄清楚为什么会得到nil。
不幸的是,我们无法告诉您,因为您没有提供显示值如何创建的代码,也没有数据我们可以尝试重新创建您的结构。
也许你的桌子有零值?也许你的代码没有捕获所有条件,允许nils泄漏。