如何在两个以上的表中使用“.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
.
中使用连接模型
我有以下联想:
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
.