如何根据其中一个关联的计数过滤记录列表?

时间:2012-02-14 04:04:30

标签: ruby-on-rails activerecord

我有与这些用户相关的用户和任务(属于)。我想得到一个与他们相关的任务少于5个的用户数。我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

不确定是否有一种简单的方法可以做到这一点,但这应该有效:

User.joins(:tasks).select("users.*, count(*) as task_count").having("task_count < 5").group(:id)

编辑:以上只返回至少有一个相关任务的用户实例。

你想要的是:

User.joins("LEFT JOIN tasks ON tasks.user_id = users.id").select("users.*, IFNULL(count(tasks.id), 0) AS task_count").having("task_count < 5").group(:id)

但更好的解决方案可能只是在您的用户模型中添加一个counter_cache。

答案 1 :(得分:0)

我不确定这是否适用于1.9.2之前,但是:

User.where(Task.count > 5).count