2012-03-10 23 views
5

Oldukça çok arandım ama kafamı bu konuda yapamam.Yakut çoklu group_by veya harita

Diğer üç modelle ilgili bir modelim var. Şehirleri diyelim. Şehirler bir kıta, bir ülke ve bölge var.

Ben bir OrderedHash geri almak isteyen bazı şehirleri veya bu gibi görünen bir dizi belirleyin:

{ 'Continent 1' => {'Country 1' => { 'Region 1' => { 'City 1', 'City 2' }}}, 'Continent 2' ...} 

Bunu nasıl yapabilirim

? bölgeye göre

+0

Sadece bölgelere göre gruplama ve sonra tüm bölgeleri uygun karma içine doldurma ile ilgili sorun nedir? –

+4

Neden bu verileri uygun şekilde verileri temsil eden ve işlevselliği eksik gösteren bir karma işleme modeline benzeten ActiveRecord model örneklerini çevirmek istiyorsunuz? – coreyward

+0

Bu Rails'de mi? –

cevap

6

Hemen grubu: Bu sıralama istihdam etmez, ancak kolayca yapmak için adapte edilebileceğini

cities_by_region = City.all(:group => :region) 

# set up an automatic 3-level hash... 
result = Hash.new { |h,k| h[k] = Hash.new { |h,k| h[k] = {}}} 

cities_by_region.each do |region, cities| 
    country = region.country 
    result[country.continent.name][country.name][region.name] = cities 
end 

Not. Karmaların yerleştirme sırasının yalnızca Ruby 1.9 + 'da tutulduğunu unutmayın.