如何在两个以上的表中使用'.includes'进行查询?

时间:2017-02-02 20:37:00

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

我有以下关联:

class Captain
  has_many :boats
end

class Boat
  belongs_to :captain
  has_many :classifications
end

class Classification
  has_many :boats
end

我想找出哪些船长的船只有分类:“双体船”的名称属性。

到目前为止,这是我最好的猜测: Captain.includes(:boats, :classifications).where(:boats => {:classifications => {:name => "catamaran"}})

2 个答案:

答案 0 :(得分:4)

试试这个

Captain.joins(boats: :classifications).where(classifications: { name: "catamaran" })

此查询导致以下SQL查询

SELECT * FROM `captains` 
   INNER JOIN `boats` ON `boats`.`captain_id` = `captains`.`id` 
   INNER JOIN `join_table` ON `join_table`.`boat_id` = `boat`.`id`     
   INNER JOIN `classifications` ON `join_table`.`classification_id` = `classifications`.id

答案 1 :(得分:0)

@Sujan Adiga有权利!

如果使用include方法,则活动记录生成2将分离sql查询。第一个用于主模型,第二个用于包含模型。但是,您在第一个查询中无法访问所包含的模型。 当您使用joins方法时,活动记录生成带有连接语句的SQL查询。因此,您可以在条款where中使用已连接的模型。