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

How do I query with '.includes' across more than two tables?

我有以下联想:

class Captain
  has_many :boats
end

class Boat
  belongs_to :captain
  has_many :classifications
end

class Classification
  has_many :boats
end

我想知道哪些船长的船的 :name 属性分类为 "catamaran."

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

试试这个

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

@Sujan Adiga 说得对!

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

中使用连接模型