首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >活动记录发现失踪的人很多。

活动记录发现失踪的人很多。
EN

Stack Overflow用户
提问于 2020-03-11 13:57:15
回答 1查看 112关注 0票数 2

鉴于以下两种模式:

代码语言:javascript
复制
class Scientist < ApplicationRecord
  has_and_belongs_to_many :papers
end

class Paper < ApplicationRecord
  has_and_belongs_to_many :scientists
end

因此,每个科学家都有许多论文,每一篇论文都有许多科学家(可以说是作者)。我的目标是找到所有没有相关论文的科学家。

代码语言:javascript
复制
Scientist.left_joins(:papers).where(papers: {id: nil}).pluck(:name)

这将引发以下错误:

ActiveRecord::StatementIn有效值: PG::UndefinedTable: ERROR:从-子句条目中丢失表格“文件”

我做错了什么?

我在Rails 6中使用Ruby2.6.5

EN

回答 1

Stack Overflow用户

发布于 2020-04-08 13:21:20

您正在查找的查询是(假设正确地创建了迁移,并且将两个模型关联的表称为scientists_papers):

代码语言:javascript
复制
Scientist.includes(:scientists_papers).where(scientists_papers: {scientist_id: nil})

生成如下的SQL查询:

代码语言:javascript
复制
SELECT "scientists".* FROM "scientists" LEFT OUTER JOIN "scientists_papers" ON "scientists_papers"."scientists_id" = "scientists"."id" WHERE "scientists_papers"."scientists_id" IS NULL

由于您使用的是has_and_belongs_to_many关系,因此scientists表中没有对papers的引用(因此不能执行left_joins(:papers))。这种关系看起来是:

有关更多细节,请查看许多协会

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60637757

复制
相关文章

相似问题

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