假设我有一个Users表,每个用户都有一个country_id(国家列表存储在另一个表中)。
我想显示每个国家/地区的列表及其拥有的成员数量,即:
Canada: 16
Romania: 12
USA: 9
我正在使用一些原始SQL,但是转移到postgres是混乱的,所以我想使用更清晰的实现。获得上述列表是否有一个很好的“rails”方式?
答案 0 :(得分:5)
这应该返回一个country_id => count
对的哈希:
@users_by_country = User.group(:country_id).count
#=> { 1 => 104, 2 => 63, ... }
生成的SQL查询如下所示:
SELECT COUNT(*) AS count_all, country_id AS country_id FROM `users` GROUP BY country_id
在你看来:
<% @countries.each do |country| %>
<%= country.name %>: <%= @users_by_country[country.id] %>
<% end>
答案 1 :(得分:2)
虽然您没有提供任何细节。所以很难准确回答,但可能会有所帮助
User.group(:country_id).count
答案 2 :(得分:0)
如果您有一个国家/地区模型,并且您希望以不同的方式进行操作,那么您可以使用.map。
Countries.map {| O | {Country:o.name,members:o.members.count}}
显然你需要有关联。如果国家只是用户的一个字段,那么这将不起作用。
BR