Как ActiveRecord ищет нули в соединении? - PullRequest
0 голосов
/ 11 января 2012

Предположим, у меня есть три таблицы в приложении 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 это делает?

1 Ответ

1 голос
/ 11 января 2012
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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...