Ruby on rails rubyonrails中多表的join操作

Ruby on rails rubyonrails中多表的join操作,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,在我的postgresql数据库中有三个表,分别名为“审计”、“位置”、“公司” 我想通过连接这些表来检索数据。我有一个可执行的sql查询,它给出了我的预期结果。我想将其转换为ruby on rails select a.name as cname, b.name as lname, count(c.company_id) as count from companies as a, locations as b, audits as c where a.id=c.company_id and b

在我的postgresql数据库中有三个表,分别名为“审计”、“位置”、“公司”

我想通过连接这些表来检索数据。我有一个可执行的sql查询,它给出了我的预期结果。我想将其转换为ruby on rails

select a.name as cname, b.name as lname, count(c.company_id) as count
from companies as a, locations as b, audits as c
where a.id=c.company_id and b.id =c.location_id
group by a.name,b.name;

我将尝试从您的查询中重新创建模型(我可能会弄错,所以您也应该将其粘贴到查询中):

因此,要重新创建查询,请执行以下操作:

Company.joins(:locations, :audits)
  .group("companies.name", "locations.name")
  .count("audits.company_id")
结果将是一个散列,其中键是由公司名称和位置名称组成的数组,值是如下所示的计数:

{[company_name, location_name] => count, ...}
这将导致以下查询:

SELECT COUNT(audits.company_id) AS count_audits_company_id, companies.name AS companies_name, locations.name AS locations_name 
FROM "companies" INNER JOIN "locations" ON "locations"."company_id" = "companies"."id"
INNER JOIN "audits" ON "audits"."company_id" = "companies"."id" 
GROUP BY companies.name, locations.name
更多信息

SELECT COUNT(audits.company_id) AS count_audits_company_id, companies.name AS companies_name, locations.name AS locations_name 
FROM "companies" INNER JOIN "locations" ON "locations"."company_id" = "companies"."id"
INNER JOIN "audits" ON "audits"."company_id" = "companies"."id" 
GROUP BY companies.name, locations.name