我正在使用RubyMine创建一个网站。我在模型中进行的一个计算已不起作用。它以前工作过,但现在我收到一个NoMethodError,指出nil:NilClass 有一个未定义的方法"+">
我在"roster.rb
"模型中添加了多个整数,范围排序如下:
scope :sorted, -> { select('*, (passing_yards + passing_tds + qb_rushing + coaching_staff + age + physical_tools + intellect + surrounding_talent + health + consistency) as xoi').order('xoi DESC') }
def xoi
passing_yards + passing_tds + qb_rushing + coaching_staff + age + physical_tools + intellect + surrounding_talent + health + consistency
end
我有使用这些整数的数据库条目,这些整数几天前就已经工作了,计算工作正常,数字排序准确。
我仍然可以用这些整数中的一个来定义"xoi",并且该整数将正确显示。我也可以用2+2定义"xoi",答案会在我的网页上正确显示为4。但这种计算已经失效。
显示此计算结果的html页面如下:
<% @players.each do |player| %>
<tr>
<td><%= player.xoi %></td>
<td><%= player.last_name %></td>
<td><%= player.first_name %></td>
<td><%= player.pos %></td>
<td><%= player.team %></td>
<td><%= player.passing_yards %></td>
<td><%= player.passing_tds %></td>
<td><%= player.qb_rushing %></td>
<td><%= player.coaching_staff %></td>
<td><%= player.age %></td>
<td><%= player.physical_tools %></td>
<td><%= player.intellect %></td>
<td><%= player.surrounding_talent %></td>
<td><%= player.health %></td>
<td><%= player.consistency %></td>
我一定做了一些小调整,无法恢复。版本控制对我不起作用。
就好像"+"不再适用于这个计算(但我确信我只是做错了什么)。
如果有任何见解,我将不胜感激。
我不明白为什么该方法未定义
这里定义了方法。请检查以下语句中的错误。
nil:NilClass的未定义方法"+">
问题是
passing_yards
对于该场景,可能为nil。因此,在评估def xoi
时
passing_yards + passing_tds + qb_rushing + coaching_staff + age + physical_tools + intellect + surrounding_talent + health + consistency
它评估为
nil + passing_tds + ...
这在ruby中是不允许的。如果你愿意,也可以在irb中检查。
> nil + 2
=> #<NoMethodError: undefined method `+' for nil:NilClass>
>