2010-10-08 6 views
1

J'ai this data et j'ai besoin d'une sortie comme ce type de sortie .. Je dois essentiellement avoir tous les lieux et leurs dates et toutes les chansons qui leur sont associées .... si quelqu'un peut penser à une meilleure structure et comment y parvenir, je serais très reconnaissant ...Comment créer ce tableau multidimensionnel, Hash Combo?

{ 
["Vector Arena - Auckland Central, New Zealand" => 
    { 
    "2010-10-10" => ["Enter Sandman", "Unforgiven", "And justice for all"] 
    }], 
    ["Brisbane Entertainment Centre - Brisbane Qld, Austr..." => 
     { 
     "2010-10-11" => ["Enter Sandman"] 
    }] 
} 

jusqu'à présent, j'essayé cela ... et ne sais pas si je me déplace dans la bonne direction ..

@venues = Hash.new {|hash, key| hash[key] = 0} 
@requests = Request.find_all_by_artist("Metallica") 
@requests.each do |request| 
    @venues[request.venue] = request.showdate 
end 

Répondre

1

Voici une solution efficace:

result = Hash.new {|h1, k1| h1[k1] = Hash.new{|h2, k2| h2[k2] = []}} 
Request.find_all_by_artist("Metallica", 
:select => "DISTINCT venue, showdate, LOWER(song) AS song" 
).each do |req| 
    result[req.venue][req.showdate] << req.song.titlecase 
end 
1

Je pense que vous structure pas tout à fait juste. Il devrait être comme

[ 
{"Vector Arena - Auckland Central, New Zealand" => 
    { 
    "2010-10-10" => ["Enter Sandman", "Unforgiven", "And justice for all"] 
    }}, 
    }"Brisbane Entertainment Centre - Brisbane Qld, Austr..." => 
     { 
     "2010-10-11" => ["Enter Sandman"] 
    }} 
] 

Essayez ce code

@venues = [] 
     all_venues = Request.find(:all, :select => "distinct venue, showdate") 
     all_venues.each do |unique_venue| 
     venue_hash = {} 
     showdate_hash = {} 
     song_lists = [] 

     requests = Request.find_all_by_venue(unique_venue.venue) 
     requests.each do |each_request| 
      song_lists << each_request.song 
     end 
     showdate_hash[unique_venue.showdate] = song_lists 

     venue_hash[unique_venue.venue] = showdate_hash 
     @venues << venue_hash 
     end 

espère que vous avez l'idée au moins.