Рубиновый хэш массива

Вопрос:

У меня есть список Flights отправляющихся и прибывающих в аэропорт. Каждый flight имеет время вылета/прибытия. Я хочу отобразить список рейсов как график с вылетами слева и прибытия справа, сгруппированные по часам, например:

     Departures  | Arrivals

Hours 08 - 09

Flight 1, 08:15  | Flight ABC, 08:12
Flight 2, 08:21  | Flight XY, 08:36
Flight 05, 08:49 | Flight ABC, 08:38

Hours 09 - 10

Flight 1, 09:25  | Flight ABC, 09:55
Flight 2, 09:56  |

....

Я создаю хэш следующим образом:

@flights= {}

Flight.each do |t|
@flights[t_time] ||= []
t_time = t.departure_date.change(min: 0)
if t.departure
@flights[t_time][0] << t #departures
else
@flights[t_time][1] << t #arrivals
end
end

Кажется, это работает. Но я не знаю, как разобрать эту структуру в представлении, чтобы получить доступ каждый раз, и после этого каждый объект в двух массивах. Любая помощь будет оценена по достоинству.

Лучший ответ:

Наконец понял это. Во-первых, я изменил хэш и инициализировал его:

@global_flights[t_time] ||= {}
@global_flights[t_time][:departures] ||= [] # departures
@global_flights[t_time][:arrivals] ||= [] # arrivals

….

Flight.each do |t|
    t_time = t.departure_date.change(min: 0)
    if t.departure
        @global_flights[t_time][:departures] << t
    else
        @global_flights[t_time][:arrivals] << t
    end
end

Это позволяет мне отображать данные по мере необходимости:

<% @global_flights.each do |times, flights| %>
    <%= times %>
    <% flights[:departures].each do |t| %>
        <%= render partial: "flight", locals: {t: t} %>
    <% end %>
    <% flights[:arrivals].each do |t| %>
        <%= render partial: "flight", locals: {t: t} %>
    <% end %>
<% end %>

Оцените статью
TechArks.Ru
Добавить комментарий