2017-04-18 67 views
0

我的Rails應用程序中有以下模式。使用活動記錄查找包含一個加入模型但不是另一個的所有記錄

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]]) 

更多信息,可以找到here

您還可以看到https://stackoverflow.com/a/29135693/7046734

+0

謝謝,但仍然不會在這裏幫助。我已經在查詢中使用了原始枚舉值,問題仍然是一樣的。 – KJF

+0

你可以在這裏發佈錯誤日誌嗎? – Mayank

相關問題