Ruby on rails ActiveRecord命令按顺序对不同表中的关联记录进行计数

Ruby on rails ActiveRecord命令按顺序对不同表中的关联记录进行计数,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有客户机、用户和操作模型。 客户端通过有多个关联属于用户。操作属于客户端。我需要检索属于特定用户(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 client

我有客户机、用户和操作模型。 客户端通过有多个关联属于用户。操作属于客户端。我需要检索属于特定用户(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运行查询)

一个可能的选择是在您的客户机模型上添加类似的内容:

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