2012-08-03 123 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" 
)