2012-08-03 120 views
0

我有两个模型,UserGroup,其中组包含许多用户。如果我想用一个查询来计算各组中的用户数,我可以使用下面的SQL:在ActiveRecord中计算关联

select id, (select count(1) from users where group_id = groups.id) from groups 

是否有可能与ActiveRecord的有效做到这一点?

要清楚,此查询将列出所有组ID以及每个组中的用户数量。

回答

1

您可以使用获得数

  1. 利用协会

    group = Group.find(1) #find group with id = 1 
    group.users.count # count users whose group_id = 1 calls db everytime 
    or 
    group.users.size # get size from cache if group.users loaded 
    
  2. 或直接

    User.where(:group_id=>1).count 
    

计数帮手触发一个COUNT(*)查询上具有指定c的数据库onditions在 http://apidock.com/rails/ActiveRecord/Calculations/count

检查更多的选择也是我建议你去通过rails guides

+0

我不清楚,我想知道如何得到这个一次计入所有组。 – 2012-08-03 21:41:36

0

我发现了一个有效的解决方案使用连接:

Group.all(
    :select => "groups.id, count(u.group_id) as users_count", 
    :joins => "LEFT OUTER JOIN users u ON u.group_id = groups.id", 
    :group => "groups.id" 
)