Данная ошибка может возникать в 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]