Tak długo, jak wiem, nie ma group_concat
odpowiednik w Railsach, ale możesz użyć includes
aby to zrobić:
continents = Continents
.joins(:countries, :event_locations)
.includes(:countries)
.group("continents.code")
continents.each do |continent|
continent.countries.join(",")
end
Spowoduje to wygenerowanie tylko 2 zapytań - wiem, że nie jest tak dobre jak jedno, ale myślę, że jest to najlepsze niż Railsy mogą sobie poradzić bez "group_concat". W drugą stronę będzie mniej więcej tak:
Country
.select("countries.id, GROUP_CONCAT(countries.name) as grouped_name")
.joins(:continents, :event_locations)
.group("continents.code")
Ale jeśli to zrobisz, musisz zmienić zgodnie z dostawcą bazy danych.
- MySQL :group_concat(nazwa kraju)
- PostgreSQL :string_agg(kraje.nazwa, ',')
- Wyrocznia :listagg(nazwa.krajów, ',')