0

特にトリッキーな Rails 3 の結合クエリを解決しようとして大量の StackOverflow 記事を調べてきましたが、役に立たなかったので、新しい質問をします!

「ユーザー」というモデルがあり、ポリモーフィックな関連付けを介して多くの「チェック」を行います (チェックの実際の列は「target_type」と「target_id」です)。チェックには、チェックの理由を示す「タイプ」と呼ばれる文字列列があります。このようなもの:

-----------------------------------------------------
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)が、完全に一致するものはないようです。)

ありがとう!

4

1 に答える 1

0

次のようにsthを試すことができます:

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
于 2013-08-11T04:14:04.927 に答える