我有以下关联:
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"}})
答案 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)
如果使用include
方法,则活动记录生成2将分离sql查询。第一个用于主模型,第二个用于包含模型。但是,您在第一个查询中无法访问所包含的模型。
当您使用joins
方法时,活动记录生成带有连接语句的SQL查询。因此,您可以在条款where
中使用已连接的模型。