ActiveRecord:按关联的has_many记录计数

时间:2019-01-05 14:14:12

标签: ruby-on-rails activerecord

鉴于用户具有许多属性:

class User
  has_many :properties
end

我想要一个报告,该报告将首先计算每个用户拥有多少个属性,然后将具有相同数量属性的用户分组在一起,对它们进行计数。

由于超出问题范围的原因,我无法在User模型上使用计数器缓存(查询合并了Properties的动态范围)。

为简单起见,到目前为止,我们已经做到了:

`User.joins(:properties).group('users.email')
     .order('COUNT(properties.id) DESC').count`

这将返回如下哈希:

{
  "email1@gmail.com"=>209,
  "email2@gmail.com"=>160,
  "email3@gmail.com"=>160
}

基于先前的示例哈希,我的目标是得到这样的哈希:

{
  209 => 1,
  160 => 2
}

因为我们有1个用户拥有209个属性,而2个用户拥有160个属性。

我已经使用ruby的.group_by实现了结果,但是目标是仅使用ActiveRecord / SQL实现它。如果有必要,我不介意运行原始SQL。

1 个答案:

答案 0 :(得分:0)

不确定是否仍需要帮助。但是,如果其他用户对此有所迷惑,希望对他们有帮助。

User.joins(:properties).group('users.id') .order('COUNT(properties.id) DESC').count