Ruby on rails ActiveRecord命令按顺序对不同表中的关联记录进行计数
我有客户机、用户和操作模型。 客户端通过有多个关联属于用户。操作属于客户端。我需要检索属于特定用户(id=1)的客户端,并计算与特定类型(action_type=1)的客户端操作相关联的数量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
我有下面的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