Ruby多个group_by或map

时间:2012-03-10 17:52:06

标签: ruby-on-rails ruby

我搜索了很多,但不能理解这个。

我有一个与其他三个模型相关的模型。我们称之为城市。城市确实有一个大陆,一个国家和地区。

当我选择一些城市时,我想找回一个OrderedHash或一个看起来像这样的数组:

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

我该怎么做?

1 个答案:

答案 0 :(得分: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 +。