如何在Rails中编写复杂的活动记录查询

时间:2018-02-21 09:46:25

标签: ruby-on-rails ruby ruby-on-rails-5 rails-activerecord active-record-query

我需要一个Active Record Query来获取一个数组。模型的CRUDS正常工作,但我需要在视图文件中获取数组。我有以下SQL语法。

select FirstName from Person.Person
LEFT JOIN Sales.SalesPerson
ON Person.BusinessEntityID = SalesPerson.BusinessEntityID
LEFT JOIN Sales.SalesTerritory
ON SalesPerson.TerritoryID = SalesTerritory.TerritoryID
where SalesPerson.BusinessEntityID is null and SalesPerson.TerritoryID is null

rails中的Active Record Query语法是什么?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

接受的答案将生成错误的查询,如下所示

select * from persons 
left outer join sales_persons on sales_persons.person_id = persons.id 
left outer join sales_territories on sales_territories.person_id = persons.id

SalesTerritory表与Person连接,但根据您的SQL,它应与SalesPerson

连接

由于它是嵌套连接,因此以下将生成正确的SQL

Person.select(:first_name).left_joins(sales_person: :sales_territory).
where(sales_persons: {business_entity_id: nil, territory_id: nil}).
pluck(:first_name)

答案 1 :(得分:0)

除了大小写和表格名称之外,您的查询应该看起来像这样

Person.left_joins(:sales_person, :sales_territory).
    where(sales_persons: {business_entity_id: nil, territory_id: nil}).
    pluck(:first_name)