首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找不存在关联的记录

查找不存在关联的记录
EN

Stack Overflow用户
提问于 2020-09-24 23:45:32
回答 1查看 25关注 0票数 0

如何仅获取电子书模型中未关联的记录?简单地说,我只想提供用户还没有的电子书。我尝试了很多解决方案,其中一个最好的方案是:

代码语言:javascript
复制
Magazine.left_joins(:ebooks).where(ebooks: { id: nil })

但是我不知道在哪里指定user_id

代码语言:javascript
复制
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:

代码语言:javascript
复制
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中找不到任何行)

但我需要这样的东西:

代码语言:javascript
复制
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和关联来实现这一点。

EN

回答 1

Stack Overflow用户

发布于 2020-09-24 23:50:30

您希望改用left_outer_join

代码语言:javascript
复制
Magazine.left_outer_joins(:ebooks).where(ebooks: { id: nil })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64049919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档