2014-07-23 4 views
-1

J'ai une liste de Flights qui part et à destination de l'aéroport. Chaque flight a une heure de départ/d'arrivée. Je veux afficher la liste des vols comme un calendrier avec les départs à gauche et arrivées à droite, regroupés par heures, comme ceci:Ruby hash of array

 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 | 

.... 

Je crée comme le hachage ceci:

@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 

Cela semble fonctionner. Mais je n'ai aucune idée de comment analyser cette structure dans la vue pour accéder à chaque fois, et après que chaque objet dans les deux tableaux. Toute aide serait appréciée.

+0

Y at-il un raison pour laquelle vous ne stockez pas l'heure d'arrivée et de départ dans le même enregistrement d'un vol? –

+0

Ce n'est pas le même vol. Ce sont des vols, des arrivées et des départs différents. Je veux juste les afficher côte à côte, en fonction de l'heure de départ/arrivée. –

+0

Je ne vais pas mentir. Ce serait très déroutant à regarder. –

Répondre

0

Enfin compris. Tout d'abord, je l'ai changé le hachage et initialisés:

@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 

Cela me permet en vue d'afficher les données en fonction des besoins:

<% @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 %>