2017-04-18 5 views
0

私のレールアプリケーションには次のスキーマがあります。1つの結合モデルが含まれていて、アクティブなレコードを使用していないすべてのレコードを検索します。

class Campaign < ApplicationRecord 
    has_many :businesses 
    has_many :clients, through: :businesses 
end 

class Business < ApplicationRecord 
    has_many :clients 
    belongs_to :campaign 
end 

class Client < ApplicationRecord 
    has_many :events 
    belongs_to :business 
end 

class Event < ApplicationRecord 
    belongs_to :client 

    enum category: { 
    :processed, 
    :delivered, 
    :opened 
    } 
end 

私はこれを行うための私の素朴な方法でした開かれたカテゴリ

ない処理され、配信イベントカテゴリを持っているキャンペーン内のすべてのクライアントを見つける方法が必要になりますが

c = Campaign.first 
c.clients.joins(:events).where('events.category' => [0, 1]).where.not('events.category' => [2]) 

しかし、これは動作しません。

このクエリは非常に大きなテーブルで実行されるので、熱心な読み込みはオプションではありません。

答えて

0

これは、通常、列挙型を基本文字列のように比較することはできません。

c = Campaign.first 
c.clients.joins(:events).where.not("events.category = (?)", Event.category[:opened]) 

か、単に

c = Campaign.first 
c.clients.joins(:events).where("events.category = (?)",[ Event.category[:processed], Event.category[:delivered]]) 

詳細は、あなたはまた、https://stackoverflow.com/a/29135693/7046734

+0

感謝を見ることができますが、それはまだここに助けにはなりませんhere

見つけることができます。私はすでにクエリで生のenum値を使用していますが、問題は同じです。 – KJF

+0

ここにエラーログを投稿できますか – Mayank

関連する問題