2015-01-27 7 views
1

Я не знал точно, как найти понятный заголовок, поэтому я постараюсь изо всех сил объяснить мою проблему.Получить массив из множества ассоциаций объектов

У меня есть 2 модель: - Страны переводимой с глобализацией, с именем и многие регионы - Регион BELONGS_TO стран

Что я хотел бы сделать, это адресности массив всех регионов формирует массив стран.

E.g.

Country.all.regions 
Country.with_translations(I18n.locale).order("country_translations.name asc").regions 

Существует простой способ получить этот массив?

+1

Country.all.map {| страна | country.regions} .flatten – cristian

+0

Спасибо, что именно я искал. Я ответил своим ответом для других! –

ответ

4

@ Осьминог-Поль решение работает, но он имеет п + 1 запросов проблемы. Чтобы избежать этого, используйте метод includes.

Country.includes(:regions).all.map {|country| country.regions }.flatten 

Подробнее здесь: http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

+3

Один приятный трюк, который вы можете здесь сделать, это использовать '.flat_map {...}' вместо '.map {...} .flatten'. – antinome

0

С @ Octopus-Пол:

Country.all.map {|country| country.regions }.flatten