Я использую api Bandsintown для захвата дат концерта, на основе которых художники следуют на моем сайте и где находится пользователь. Прямо сейчас у меня возникают проблемы с итерацией многомерного массива данных, которые я возвращаю в ответ.Итерирование по многомерному массиву для захвата определенных значений ruby
Цель
Чтобы перебрать массив массивов, а затем захватить имя для художников, чтобы отобразить его на мой взгляд.
Я могу захватить данные, которые я хочу с помощью следующего кода внутри моего контроллера:
class CalendarController < ApplicationController
require 'uri'
def index
@user = current_user
@hash_version_array = []
@user.follows.each do |follow|
response = HTTParty.get("http://api.bandsintown.com/artists/#{URI.escape(follow.artist_name)}/events/search.json?api_version=2.0&app_id=el_proyecto_de_la_musica&location=use_geoip")
@hash_version = JSON.parse(response.body)
@hash_version_array << @hash_version
end
@hash_version_array
end
def show
end
end
код выше дает следующие результаты внутри моего @hash_version_array (нажмите here для результатов, легче показать через gist на github)
Я застреваю при попытке перебрать @hash_version_array, чтобы захватить имя каждого художника.
ПОПЫТКА 1
[9] pry(#<CalendarController>)> @hash_version_array.each do |sub_array|
[9] pry(#<CalendarController>)* sub_array.each do |artist|
[9] pry(#<CalendarController>)* artist["artists"]["name"]
[9] pry(#<CalendarController>)* end
[9] pry(#<CalendarController>)* end
Результаты в
TypeError: no implicit conversion of String into Integer
from (pry):96:in `[]'
Попытка 2
[8] pry(#<CalendarController>)> @hash_version_array.each do |sub_array|
[8] pry(#<CalendarController>)* sub_array.each do |artist|
[8] pry(#<CalendarController>)* artist["artists"].each do |artist|
[8] pry(#<CalendarController>)* artist["name"]
[8] pry(#<CalendarController>)* end
[8] pry(#<CalendarController>)* end
[8] pry(#<CalendarController>)* end
Результаты в том же значении для меня @hash_version_array, чтобы начать с
Причину вы получили этот результат что 'каждый' возвращает свой приемник. –
Ваш хэш содержит несколько имен исполнителя. Вы хотите извлечь их все в один массив? –
Ваш вопрос можно улучшить несколькими способами. 1. Не следует указывать ссылки на данные или код. Если ссылка сломана, вопрос станет неполным для читателей в будущем. 2. Ваш хэш имеет гораздо больше ключей, чем необходимо для целей вопроса. Откиньте его до самого маленького хеша, необходимого, чтобы сделать вашу мысль. Покажите это в своем вопросе и дайте ему имя (например, 'my_hash = {...}', чтобы читатели могли ссылаться на это имя в комментариях и ответах без необходимости его определения. 3. Покажите желаемый результат для этого хэша 4. Удалите код «захватить данные», если это не относится к вашему вопросу. –