什么是ActiveRecord在联接中搜索空值的方法?

时间:2012-01-10 21:57:37

标签: sql activerecord join

假设我的Rails应用中有三个表:catsdogsowners。我想找到所有的猫也有狗的猫。

使用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的做法是什么?

1 个答案:

答案 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")