我有客户端,用户和动作模型。
客户端通过has_and_belongs_to_many关联属于User。行动属于客户。我需要检索属于特定用户(id = 1)的客户端和与特定类型的客户端操作相关联的计数(action_type = 1)
我有以下SQL查询,它可以很好地完成工作
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 :(得分: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