Проверка на ноль предупреждает о неожиданном нуле - PullRequest
1 голос
/ 11 января 2011

У меня есть следующий чек на ноль:

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

но все равно я получаю:

У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр ActiveRecord :: Base. Произошла ошибка при оценке nil. []

Как я могу предотвратить это?

Ответы [ 4 ]

4 голосов
/ 11 января 2011

Я не знаю Руби, но я думаю, что это не так до .nil:

deal['deal']['party']['party']
    ^       ^        ^

Стрелками указаны возможные нулевые индексы. Например, что если ["deal"] равен nil или первая ["party"] равна nil?

2 голосов
/ 11 января 2011

Возможно, вы захотите взглянуть на игру andand:

http://andand.rubyforge.org/

2 голосов
/ 11 января 2011

Проверяя !deal.nil? и !deal['deal'].nil? и !deal['deal']['party'].nil? и !deal['deal']['party']['party'].nil?

0 голосов
/ 01 апреля 2011

На каждом шаге вы можете использовать соответствующий метод, встроенный в 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', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...