Я думаю, что подход с 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
.