tl; др
использование @movieList["movies"].each
объяснение
Проблема в том, что вы действуете какхотя ваш @movieList
представляет собой массив ann , на самом деле это хеш (при условии, что @movieList
- это JSON, который вы показали).
each
работает наи массивы и хэши.Однако, когда вы используете его для хэша, блок передается |key, val|
.Кроме того, присвоение блочных переменных не является обязательным.Итак, когда вы говорите, @movieList.each do |item|
, item
на самом деле является ключом верхнего уровня хеша («кино»).
Строки, такие как "фильмы", отвечают на []
индексацию с числами .Вот почему вы получаете ошибку no implicit conversion of symbol into integer
... потому что вы передаете символ String#[]
, и он ожидает целое число.
Другой способ написания этого кода, более идиоматический, будет выглядеть так:
@movies = @movieList["movies"].map do |movie|
{
column1: movie["title"],
column2: movie["year"],
column3: movie["format"]
}
end