3

Rails アプリケーションに Book モデルがあり、さまざまなプロパティ (book db テーブルの列とも呼ばれます) があります。これらのプロパティの 1 つが「ランキング」です。

最近、5 月のアプリ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]またはに変更すると、100% の確率で機能します。book['ranking']book.ranking

何か案は?

PS この問題は、Book やランキング属性だけでなく、他のモデルや属性でも断続的に発生しています。

4

5 に答える 5

2

本のオブジェクトは、ランキングではなく、nilのオブジェクトです。だから持っている

return book.ranking unless book.nil?

問題を解決する必要があります。

于 2010-04-07T15:56:28.230 に答える
1

nil 呼び出しから保護するには、いくつかの方法があります。

ifで確認してください:

return book.ranking if book

&&/and を使用:

return book && book.ranking

tryを使用します(Ruby 1.9 または Rails/ActiveSupport で):

return book.try(:ranking)
于 2010-04-08T07:51:07.283 に答える
1

ここで使用tryします:

book.try(:ranking)

bookまたはの場合rankingnilthennilが返されます。

于 2010-04-07T20:10:09.480 に答える
0

本がゼロかどうかを確認する必要があります

return book.ranking unless book.blank? and book.ranking.blank?
于 2010-04-07T16:30:29.387 に答える
0

次の方法でも実行できます。

return book.ranking unless book and book.ranking

またはandand宝石で:

return book.ranking unless book.andand.ranking
于 2010-04-07T20:35:20.247 に答える