2012-02-14 65 views

回答

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添加到您的用户模型。

+0

我不能肯定,但我不认为这是工作。它给了我一个我相当肯定不能正确的数字。我们有大约1万个用户,当我改变这个方式来找到少于100个任务的用户时......它告诉我大约有2000个用户。但是,每个用户的平均任务数是2.2 ...那么这怎么可能是正确的呢?编辑:然后当我做超过100个任务的用户时,它说82 ...总共比我们的10,000个用户基数少很多。 – 2012-02-14 18:24:12

+0

对不起。我编辑了我的答案,以更好地解决您的问题。 – 2012-02-14 20:00:20

0

我不知道,如果这个工程预1.9.2但:

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

我在1.8.7,这没有奏效。给我:错误的参数数量(0代表1) – 2012-02-14 17:49:12

相关问题