ActiveRecord命令序列用于计算来自不同表的关联记录

时间:2013-11-15 12:40:57

标签: ruby-on-rails activerecord

我有客户端,用户和动作模型。 客户端通过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运行查询)

1 个答案:

答案 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