x [2] ['comments'] ['data'] [1] - пустой хеш, поэтому, когда вы вызываете ['from'] для него, результат равен nil, что означает вызов ['name'] на этот результат ноль, выдает ошибку. Вот как вы можете воспроизвести это:
x = {}
x['from'] #=> nil
x['from']['name'] #=> NoMethodError
Вы можете рассматривать свой запрос как набор вызовов функций:
x[2]['comments']['data'][1]['from']['name']
# is equivalent to:
x.[](2).[]('comments').[]('data').[](1).[]('from').[]('name')
Если какой-либо из этих вызовов функции возвращает nil, вы не можете сделать еще один вызов функции [] без ошибки.