Предложение объединения не будет достаточным, потому что вам нужно проверить, что значение столбца read
для каждого page
дочернего элемента из родительской книги не ложно.
Вы можете явно добавить необходимыеиспользовать фильтр where
:
Book.where.not(id: Page.where(read: false).select(:book_id))
Используя select
в Page.where(read: false)
Rails выполняет один запрос, например:
SELECT "books".*
FROM "books"
WHERE "books"."id" NOT IN (
SELECT "pages"."book_id"
FROM "pages"
WHERE "pages"."read" = $1
) [["read", false]]