Check for nil adverte sobre o inesperado nulo

Eu tenho o seguinte cheque para nil:

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

mas ainda assim fico:

Você tem um object nulo quando não esperava! Você pode ter esperado uma instância de ActiveRecord :: Base. O erro ocorreu durante a avaliação de zero.

Como posso evitar isso?

Eu não sei Ruby, mas acho que dá errado antes do .nil:

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

As setas indicam possíveis índices nulos. Por exemplo, e se [“negociar”] for nulo ou a primeira [“parte”] for nula?

Você pode querer dar uma olhada no jogo andand :

http://andand.rubyforge.org/

Verificando !deal.nil? e !deal['deal'].nil? e !deal['deal']['party'].nil? e !deal['deal']['party']['party'].nil?

Em cada etapa, você pode usar um método apropriado construído em NilClass para escaping de nil, se fosse array, string ou numérico. Basta adicionar to_hash ao inventário dessa lista e usá-lo.

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

Você também pode fazer:

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