Pokud vím, žádný group_concat
neexistuje ekvivalent v Rails, ale můžete použít includes
jak to udělat:
continents = Continents
.joins(:countries, :event_locations)
.includes(:countries)
.group("continents.code")
continents.each do |continent|
continent.countries.join(",")
end
To vytvoří pouze 2 dotazy - vím, není to tak dobré jako jeden, ale myslím si, že je to nejlepší, co Rails dokáže udělat bez "group_concat". Druhý způsob bude něco takového:
Country
.select("countries.id, GROUP_CONCAT(countries.name) as grouped_name")
.joins(:continents, :event_locations)
.group("continents.code")
Ale pokud to uděláte, musíte to změnit podle dodavatele vaší databáze.
- MySQL :group_concat(country.name)
- PostgreSQL :string_agg(country.name, ',')
- Oracle :listagg(country.name, ',')