2012-03-10 6 views
5

私は非常に多くを検索しましたが、私はこの1つの周りに私の頭をすることはできません。Ruby multiple group_byまたはmap

私は3つの他のモデルに関連するモデルを持っています。それを都市と呼んでみましょう。都市には大陸、国、地域があります。

私はOrderedHashまたは次のようになります配列を取り戻すしたいいくつかの都市を選択:

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

私はこれをどのように行うことができますか?地域別

+0

リージョン別にグループ化し、すべてのリージョンを適切なハッシュに詰め込むだけで問題はありますか? –

+4

なぜこのデータを適切にモデル化したActiveRecordモデルインスタンスを、データをあまり表現していない機能に欠けるハッシュに変換したいのですか? – coreyward

+0

これはRailsにありますか? –

答えて

6

ジャストグループ:これはソート採用していないが、簡単に行うように適合させることができることを

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 

注意。ハッシュの挿入順序はRuby 1.9以降でのみ保持されることに注意してください。