了解每个国家的居民数量

时间:2014-01-15 11:36:28

标签: ruby-on-rails ruby

假设我有一个Users表,每个用户都有一个country_id(国家列表存储在另一个表中)。

我想显示每个国家/地区的列表及其拥有的成员数量,即:

Canada: 16
Romania: 12
USA: 9

我正在使用一些原始SQL,但是转移到postgres是混乱的,所以我想使用更清晰的实现。获得上述列表是否有一个很好的“rails”方式?

3 个答案:

答案 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