如何仅获取电子书模型中未关联的记录?简单地说,我只想提供用户还没有的电子书。我尝试了很多解决方案,其中一个最好的方案是:
Magazine.left_joins(:ebooks).where(ebooks: { id: nil })但是我不知道在哪里指定user_id
model Magazine
has_many :ebooks
has_many :users, :through => :ebook
model Ebook
belongs_to :user
belongs_to :magazine
model User
has_many :ebooks我是rails的新手,很抱歉我问了一个愚蠢的问题。
@Hass
谢谢,但这会像这样生成sql:
SELECT "magazines".* FROM "magazines"
INNER JOIN "ebooks" ON "magazines"."id" = "ebooks"."magazine_id"
LEFT OUTER JOIN "ebooks" "ebooks_magazines" ON "ebooks_magazines"."magazine_id" = "magazines"."id"
WHERE "ebooks"."user_id" = 1 AND "ebooks"."id" IS NULL (WHERE“ebook”.“user_id”=1 =>这将返回0条记录,因为where筛选器在表ebook中找不到任何行)
但我需要这样的东西:
SELECT "magazines".*, ebooks.user_id FROM "magazines"
LEFT JOIN "ebooks" ON "magazines"."id" = "ebooks"."magazine_id" AND ebooks.user_id = 1
LEFT OUTER JOIN "ebooks" "ebooks_magazines" ON "ebooks_magazines"."magazine_id" = "magazines"."id"
WHERE ebooks.user_id IS NULL这将返回我正在查找的行,但我不知道如何使用rai和关联来实现这一点。
发布于 2020-09-24 23:50:30
您希望改用left_outer_join。
Magazine.left_outer_joins(:ebooks).where(ebooks: { id: nil })https://stackoverflow.com/questions/64049919
复制相似问题