书has_many
页
页belongs_to
书
页面具有布尔属性 read
这样,书号:1条记录可能具有:
read
真read
真read
错误然后,书号:2为:
read
真read
真这样,必须从查询中返回书号:2。
目前我有:
Book.includes(:pages).where(pages: {read: true})
并且它同时返回Bookid: 1
和id: 2
。
如何解决?
join子句还不够,因为您需要检查来自书本父级的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]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句