2013-11-15 20 views
0

我有Client,User和Action模型。 客戶端通過has_and_belongs_to_many關聯屬於用戶。操作屬於客戶。我需要找回屬於特定用戶(ID = 1)客戶端和計數與特定類型的客戶端操作相關聯(ACTION_TYPE = 1)

我有以下SQL查詢,它確實工作得很好ActiveRecord命令序列來統計來自不同表格的關聯記錄

SELECT clients.*, count(CASE WHEN actions.action_type = 1 THEN 1 END) AS client_actions FROM clients, actions, clients_users WHERE clients.id=actions.client_id AND clients.id=clients_users.client_id AND clients_users.user_id=1 GROUP BY clients.id 

這有效地查詢數據庫的客戶數據,並計數關聯的對象。不過,我正在努力理解如何將其包裝到ActiveRecord命令序列中,所以我可以使用Paginate來獲得結果。 (目前我使用運行在的find_by_sql查詢)

回答

0

一個潛在的選擇是加入這樣的事情在你的客戶端模式:

def self.find_clients(user_id, action_type) 
    clients = Client.scoped({}) 
    clients = clients.scoped(joins: :users, conditions: ["user_id = ?", user_id]) 
    clients = clients.scoped(joins: :actions, conditions: ["action_type = ?", action_type]) 
    clients = clients.count 
end 
相關問題