How can I use GROUP_CONCAT in Rails?
As long as I know, there's no group_concat
equivalent in Rails, but you can use includes
to do that:
continents = Continents
.joins(:countries, :event_locations)
.includes(:countries)
.group("continents.code")
continents.each do |continent|
continent.countries.join(",")
end
This will produce only 2 queries - I know, is not so good as one, but I think that is the best than Rails can do without "group_concat". The other way will be something like that:
Country
.select("countries.id, GROUP_CONCAT(countries.name) as grouped_name")
.joins(:continents, :event_locations)
.group("continents.code")
But if you do that, you need to change according to your database vendor.
- MySQL: group_concat(countries.name)
- PostgreSQL: string_agg(countries.name, ',')
- Oracle: listagg(countries.name, ',')