Rails, ActiveRecord, как найти чужие строки, которых там нет? - PullRequest
1 голос
/ 29 мая 2010

Заголовок немного сложнее для этого вопроса.

Скажем, у меня есть две модели, Foo и Bar. У Фу много баров. Бар принадлежит одному фу. Как я могу использовать Foo.find, чтобы найти все Foo, которые в настоящее время имеют ноль баров? В SQL это будет выглядеть примерно так:

SELECT * from foo where id NOT IN (select foo_id from bar);

1 Ответ

2 голосов
/ 29 мая 2010

Foo.all(:conditions => ["id NOT IN (?)", Bar.all.map(&:foo_id)]) сделает это, хотя есть вероятность оптимизации, которую вы можете взять оттуда.

Если есть проблемы со скоростью, вы можете использовать кэш счетчика, который превратит запрос в Foo.find_all_by_bars_count(0)

Документация по встречным кешам здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...