Посмотрите на ваш XML:
<fare_master_pricer_reply>
<flight_index>
<group_of_flights>
<!--...-->
</group_of_flights>
<group_of_flights>
<!--...-->
</group_of_flights>
<group_of_flights>
<!--...-->
</group_of_flights>
<!--...-->
Итак, <flight_index>
содержит список <group_of_flights>
элементов. Естественно, это будет представлено как массив, а не хеш.
Затем вы делаете это:
@flights = response.to_hash[:fare_master_pricer_calendar_reply][:flight_index]
И это эквивалентно этому:
h = response.to_hash
@flights = [:fare_master_pricer_calendar_reply][:flight_index]
Итак, @flights
заканчивается содержимым <flight_index>
. Как отмечалось выше, <flight_index>
- это просто контейнер для списка элементов <group_of_flights>
, и ваш XML-менеджер, вероятно, преобразует этот список в наиболее естественное представление списка, что даст вам экземпляр Array, а не Hash.
Вы не хотите перебирать @flights
как хэш, вместо этого перебирайте его как массив. Вероятно, вы столкнетесь с такой же ситуацией с внутренними элементами <flight_details>
.