首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写这个Rails ActiveRecord多到多查询?

如何编写这个Rails ActiveRecord多到多查询?
EN

Stack Overflow用户
提问于 2022-03-07 15:07:43
回答 2查看 49关注 0票数 1

JobsStacks之间,通过JobStacks,我有很多到很多的关系。我正在编写一个ActiveRecord查询,以返回包含传递给它的所有堆栈的作业。

代码语言:javascript
运行
复制
class Job < ApplicationRecord  
  has_many :job_stacks
  has_many :stacks, through: :job_stacks
end
代码语言:javascript
运行
复制
class JobStack < ApplicationRecord
  belongs_to :job
  belongs_to :stack
end
代码语言:javascript
运行
复制
class Stack < ApplicationRecord
  has_many :job_stacks, dependent: :destroy
  has_many :jobs, through: :job_stacks
end

这将创建一个返回包含任意堆栈的作业的SQL IN查询。

代码语言:javascript
运行
复制
Job.joins(:stacks).where(stacks: {name: ['JavaScript', 'Python']})

是否有类似的方法来编写这个返回的Jobs,其中包含所有的Stacks作为来自Jobs.where调用

EN

回答 2

Stack Overflow用户

发布于 2022-03-07 16:27:05

这是一种只使用DB 阿格函数获取结果的方法。

代码语言:javascript
运行
复制
Job.joins(:stacks).select("STRING_AGG(stacks.name) AS stack_name").group('stacks.job_id').having("stack_name= 'JavaScript,Python'")

还有另一种方法阿格,我还没有使用它,但是我认为您也可以尝试使用这个方法。

票数 2
EN

Stack Overflow用户

发布于 2022-03-07 16:42:17

你可以试试这个:

代码语言:javascript
运行
复制
names = ['JavaScript', 'Python']
Job.where(id: 
  Stack.
    where(name: names).
    select(:job_id).
    group(:job_id).
    having("count(*) >= ?", names.size)
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71383099

复制
相关文章

相似问题

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