在Rails 3中查询has_many关联的计数

时间:2013-08-10 14:54:37

标签: sql ruby-on-rails ruby-on-rails-3 activerecord

我一直在阅读一堆StackOverflow文章试图找出一个特别棘手的Rails 3加入查询无济于事 - 所以我问了一个新问题!

我有一个名为“User”的模型,它通过多态关联has_many“Checks”(Check上的实际列是“target_type”和“target_id”)。 Check有一个名为“type”的字符串列,表示检查的原因。像这样:

-----------------------------------------------------
id   |  target_type  |  target_id  |      type     |
-----------------------------------------------------
1        User          1          type_1
2        User          2          type_2

我想找到所有没有使用集合类型与之关联的支票的用户 - 所以这是一个加入和计数,我想。

因此,例如,我希望能够进行查询以查找没有“type_1”检查的所有用户,并且应该返回ID为#2的用户。

我将如何做到这一点?

(我一直在关注计数和分组的所有内容(例如Rails has_many association count child rows),但似乎没有什么匹配。)

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试:

class Merchant < ActiveRecord::Base
  ...
  def self.non_fraudulent
    includes(:fraud_checks).group("#{self.table_name}.id").having("SUM(CASE WHEN fraud_checks.type = 'fraudulent_ip' THEN 1 ELSE 0 END) = 0")
  end
end