检查nil警告意外的零

时间:2011-01-11 10:44:13

标签: ruby-on-rails ruby null

我对nil进行了以下检查:

client = !deal['deal']['party']['party'].nil? ? deal['deal']['party']['party']['company_id'] : ""

但我仍然得到:

  

当你没想到它时,你有一个零对象!   您可能期望ActiveRecord :: Base的实例。   在评估nil。[]

时发生错误

我该如何防止这种情况?

4 个答案:

答案 0 :(得分:4)

我不认识Ruby,但我认为在.nil:

之前出错了
deal['deal']['party']['party']
    ^       ^        ^

箭头表示可能的零指数。例如,如果[“deal”]为零或第一个[“party”]为零,该怎么办?

答案 1 :(得分:2)

选中!deal.nil?!deal['deal'].nil?以及!deal['deal']['party'].nil?!deal['deal']['party']['party'].nil?

答案 2 :(得分:2)

您可能需要查看andand游戏:

http://andand.rubyforge.org/

答案 3 :(得分:0)

在每个步骤中,您可以使用NilClass中内置的适当方法来逃避nil,如果它是数组,字符串或数字。只需将to_hash添加到此列表的清单中即可使用它。

class NilClass; def to_hash; {} end end
client = deal['deal'].to_hash['party'].to_hash['party'].to_hash['company_id'].to_s

你也可以这样做:

client = deal.fetch('deal', {}).fecth('party', {}).fetch('party', {}).fetch('company_id', '')