Рассмотрим "человека", хранящегося в хеше. Два примера:
fred = {:person => {:name => "Fred", :spouse => "Wilma", :children => {:child => {:name => "Pebbles"}}}}
slate = {:person => {:name => "Mr. Slate", :spouse => "Mrs. Slate"}}
Если "человек" не имеет детей, элемент "children" отсутствует. Итак, для мистера Слейта мы можем проверить, есть ли у него родители:
slate_has_children = !slate[:person][:children].nil?
Итак, что, если мы не знаем, что "шифер" - это "хэши" человека? Рассмотрим:
dino = {:pet => {:name => "Dino"}}
Мы больше не можем легко проверить детей:
dino_has_children = !dino[:person][:children].nil?
NoMethodError: undefined method `[]' for nil:NilClass
Итак, как бы вы проверили структуру хэша, особенно если он глубоко вложен (даже глубже, чем примеры, приведенные здесь)? Возможно, лучший вопрос: что такое "Ruby way"?