Как найти все записи с нулевым числом ассоциаций has_many? - PullRequest
1 голос
/ 24 января 2012

Допустим, у вас есть модель Question со следующей ассоциацией has_many: (пример взят из плагина this )

has_many :comment_threads, 
         :class_name => "Comment", 
         :as         => :commentable, 
         :dependent  => :destroy

Как бы я определил область или метод класса, который возвращает вопросы, которые не имеют связанных комментариев?

В основном я хочу, чтобы Question.unanswered вернул все вопросы с нулевыми комментариями.

1 Ответ

3 голосов
/ 24 января 2012

Я думаю, что подход с counter_cache приятнее и быстрее, но вы можете создать желаемую область видимости (вам могут потребоваться некоторые корректировки, если я угадал имена таблиц или столбцов неправильно):

scope :unanswered, 
  joins('LEFT OUTER JOIN comments ON comments.commentable_id = questions.id').
  where('comments.id IS NULL')

Использование LEFT OUTER JOIN создает объединенную таблицу, в которой для некомментированного вопроса все столбцы таблицы комментариев установлены на NULL.Это именно те строки, которые нам нужны, поэтому мы фильтруем их, используя where.

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