【发布时间】:2017-01-13 20:42:25
【问题描述】:
如果这已经存在,我深表歉意,我已经看过但找不到这个确切的问题。
假设我有三个 ActiveRecord 模型,Continent、Country 和 Town。 Town 有一个属性 population,我有兴趣通过汇总各个城镇的人口来分解每个国家/地区的人口,按大陆分组。
因为一个国家有很多城镇,而一个大陆的国家相对较少,而且只有几个大陆,我可能会继续做这样的事情:
continents = {}
Continent.each do |continent|
country_breakdown = {}
continent.countries.each do |country|
country_breakdown[country] = country.towns.sum(:population)
end
continents[continent] = country_breakdown
end
...然后在视图中遍历continents。
问题在于这具有 SQL 复杂性O(n),其中n 是国家/地区的数量。
我的问题是:有什么方法可以让 SQL 生成(在单个查询中)这个分组结果,然后我们可以像在 Rails 中视图侧的普通嵌套 Hash 一样迭代它?
我尝试过使用 ActiveRecord::QueryMethods#group,但我完全不知道如何迭代由此产生的结果。
【问题讨论】:
标签: sql ruby-on-rails activerecord