Следующий запрос дает вам авторов, по крайней мере, с комментарием, который не модерируется:
bad_authors = Author.joins(posts: :comments)
.where.not(comments: { status: :moderated })
.select(:id)
Затем следующий запрос дает вам авторов, для которых все связанные комментарии связанных сообщений имеют статус moderated
:
Author.where.not(id: bad_authors)
Обратите внимание, что это также возвращает авторов без комментариев (так как все их комментарии модерируются, пусто проверяет все). При необходимости запрос можно легко изменить, удалив авторов без комментариев.
Обратите внимание, что это вызывает единственный запрос (с подзапросом), даже если вы напишете его двумя частями. Вы можете использовать pluck
вместо select
в первом запросе для генерации двух запросов. Что более эффективно, зависит от используемой базы данных и имеющихся у вас индексов.