是什么导致“NoMethodError:未定义的方法`include?'为零:NilClass“

时间:2010-04-07 15:42:07

标签: ruby-on-rails ruby model methods undefined

我的Rails应用程序中有一个Book模型,具有各种属性(在本书db表中也称为列)。其中一个属性是“排名”。

最近,app可能已开始针对以下代码抛出NoMethodError: undefined method 'include?' for nil:NilClass

def some_method(book, another_arg)
  return book.ranking unless book.ranking.blank?
  ...
end

然而,这并不一致。绝大多数时间,访问book.ranking工作 - 错误被抛出可能2-4%的时间。如果我将代码更改为book[:ranking]book['ranking']而不是book.ranking,则会100%有效。

有什么想法吗?

P.S。这个问题已经与其他模型和属性间歇性地出现......不仅仅是Book和排名属性。

5 个答案:

答案 0 :(得分:2)

书籍对象是零,而不是排名。所以有

return book.ranking unless book.nil?

应该解决问题。

答案 1 :(得分:1)

我会在这里使用try

book.try(:ranking)

如果bookrankingnil,则会返回nil

答案 2 :(得分:1)

有几种方法可以防止来自nil-calls:

使用检查

return book.ranking if book

使用&& /和

return book && book.ranking

使用尝试(在Ruby 1.9中或使用Rails / ActiveSupport):

return book.try(:ranking)

答案 3 :(得分:0)

你应该检查书是否为零

return book.ranking unless book.blank? and book.ranking.blank?

答案 4 :(得分:0)

你也可以这样做:

return book.ranking unless book and book.ranking

或使用andand gem:

return book.ranking unless book.andand.ranking