假设我的Rails应用中有三个表:cats
,dogs
和owners
。我想找到所有不的猫也有狗的猫。
使用SQL,我可以执行以下操作:
SELECT
`cats`.*
FROM
`cats`
LEFT JOIN `dogs` ON `cats`.`owner_id` = `dogs`.`owner_id`
WHERE
`dogs`.`id` IS NULL;
但是,我想将此作为Cat
上的可链接范围。我到目前为止最接近的是Cat.connection.select_all(query_string)
,但这不是可链接的。
ActiveRecord的做法是什么?
答案 0 :(得分:1)
Cat.joins("LEFT JOIN `dogs` ON `cats`.`owner_id` = `dogs`.`owner_id`").where("`dogs`.`id` IS NULL")
或者如果你想把它作为范围:
scope :cats_without_dogs, joins("LEFT JOIN `dogs` ON `cats`.`owner_id` = `dogs`.`owner_id`").where("`dogs`.`id` IS NULL")