Miễn là tôi biết, không có group_concat
tương đương trong Rails, nhưng bạn có thể sử dụng includes
để làm điều đó:
continents = Continents
.joins(:countries, :event_locations)
.includes(:countries)
.group("continents.code")
continents.each do |continent|
continent.countries.join(",")
end
Điều này sẽ chỉ tạo ra 2 truy vấn - tôi biết, không quá tốt bằng một truy vấn, nhưng tôi nghĩ đó là điều tốt nhất mà Rails có thể làm nếu không có "group_concat". Cách khác sẽ giống như thế:
Country
.select("countries.id, GROUP_CONCAT(countries.name) as grouped_name")
.joins(:continents, :event_locations)
.group("continents.code")
Nhưng nếu bạn làm điều đó, bạn cần phải thay đổi tùy theo nhà cung cấp cơ sở dữ liệu của mình.
- MySQL :group_concat (country.name)
- PostgreSQL :string_agg (country.name, ',')
- Oracle :listagg (country.name, ',')