Руби несколько group_by или карта - PullRequest
5 голосов
/ 10 марта 2012

Я много искал, но не могу обойти это.

У меня есть модель, которая связана с тремя другими моделями. Давайте назовем это городами. У городов есть континент, страна и регион.

Когда я выбираю несколько городов, я хочу получить OrderedHash или массив, который выглядит следующим образом:

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

Как я могу это сделать?

1 Ответ

6 голосов
/ 10 марта 2012

Всего групп по регионам:

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 +.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...