Данная ошибка может возникать в Ruby при попытке обратиться к несуществующему свойству объекта, который почему-то стал nil.
Рассмотрим пример, запустив консоль Rials (rails c):
Как видно, при попытке получить элемент с индексом :zzz мы получаем nil, и уже для nil мы пытаемся найти элемент с индексом :c, что приводит к ошибке, ведь у nil нет метода [].
Решение:
Обратите внимание, что этот способ работает только в Rails. В чистом Ruby он не поможет, там можно использовать трюк с if:
Рассмотрим пример, запустив консоль Rials (rails c):
hash = {a: 1, b: {c: 2}} => {:a=>1, :b=>{:c=>2}} # Получаем элемент с индексом :a hash[:a] => 1 # Получаем элемент с индексом :b hash[:b] => {:c=>2} # Получаем элемент с индексом :b, а для него - с индексом :c hash[:b][:c] => 2 # Пытаемся получить эл-нт с индексом :zzz, а для него - с индексом :c hash[:zzz][:c] NoMethodError: undefined method `[]' for nil:NilClass
Как видно, при попытке получить элемент с индексом :zzz мы получаем nil, и уже для nil мы пытаемся найти элемент с индексом :c, что приводит к ошибке, ведь у nil нет метода [].
Решение:
hash[:zzz].try(:[], :c)
Обратите внимание, что этот способ работает только в Rails. В чистом Ruby он не поможет, там можно использовать трюк с if:
hash[:zzz][:c] if hash[:zzz]