如何将此原始查询转换为活动记录查询接口或区域?

2024-04-11

我想找到courses其中至少有 1variant with variant_type= 1 并且没有任何variant with variant_type = 2.

所以我的查询如下:

Course.where("id IN ( SELECT course_id
                     FROM course_variants
                     WHERE variant_type = 1
                   )
             AND id NOT IN (
                     SELECT course_id
                     FROM course_variants
                     WHERE variant_type = 2
                   )")

另外,一个course有很多course_variants.

我在 where 子句中使用原始查询,我想使用 Active record 接口或 Arel 来改进它,有什么解决方案吗?

谢谢你!

使用输入更新预期输出

Input

course: {id=1, course_variants: [{variant_type: 1}, {variant_type: 2}]}
course: {id=2, course_variants: [{variant_type: 1}, {variant_type: 3}]}
course: {id=3, course_variants: [{variant_type: 2}, {variant_type: 3}]}

Output

course: {id=2, course_variants: [{variant_type: 1}, {variant_type: 3}]}

您可以稍微调整您的模型关联:

class Course < ActiveRecord::Base
  has_many :type_1_variants, class_name: "CourseVariant", -> { where(variant_type: 1) }
  has_many :non_type_3_variants, class_name: "CourseVariant", -> { where.not(variant_type: 3) }
end

Course.joins(:type_1_variants, :non_type_3_variants).group(:course_id).having('COUNT(course_variants.id) > 0').having('COUNT(non_type_3_variants_courses.id) > 0')

您可能需要将“non_type_3_variants_courses”替换为 ARel 在进行连接时生成的正确别名(我没有 Rails env atm)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将此原始查询转换为活动记录查询接口或区域? 的相关文章

  • render_views 在 rspec 中做什么?

    我对 rspec 很陌生 对 Rails 也很陌生 在为控制器编写测试用例时 我注意到render views经常使用 这是做什么的 如果我不调用它会发生什么 它呈现控制器规范中的视图 如果不放置 render views 视图将不会渲染
  • 使用 Active Record 信誉系统 gem,当我按投票排序时不会发生排序

    遵循 RailsCast 的信誉系统 gem 我将以下代码添加到我的 microposts controller 中 def index microposts Micropost paginate page params page find
  • 更改 Rails 中的默认错误消息

    我们的客户决定 他们希望整个应用程序中所有空白 AR 错误消息从 不能为空 更改为 必须完成 Rails 最简单的方法是什么 Use config locales en yml 具体来说 将以下内容放入该文件中 en activerecor
  • 如何使用 rspec 测试传递到 Rails 3 中的控制器的参数?

    我们的代码 describe GET show do it assigns the requested subcategory as subcategory do subcategory Subcategory create valid a
  • Capistrano 部署后 EC2 服务器中缺少 puma.sock

    通过 capistrano 将 ruby on Rails 项目的生产部署到 ec2 上的实例后 我在 nginx 错误日志中收到以下错误 亚马逊公共主机显示 502 Bad Gateway nginx 1 10 0 Ubuntu 我按照教
  • 为什么将 Backbone.js 与 Rails 结合使用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rails Active Model Serializer - has_many 并访问父记录

    我正在尝试使用 Active Model Serializer 构建一些 Rails 模型的 JSON 表示 其中一些模型嵌入了其他模型 例如 我有活动和参加者 活动 has and belongs to many 参加者 class Ev
  • docker环境下日志不保存到文件

    在我的生产环境中production rb 我已配置我的日志将保存到文件中 config logger Logger new log production log 当我在本地运行时 使用命令行启动服务器rails s e productio
  • 如何在 Rails 模型中获取 request.uri?

    request request 当我在控制器中写这个时 它就会起作用 但是如果我在模型或应用程序控制器中需要这个变量 我该怎么办 模型存在于 Web 请求的上下文之外 您可以在 irb 中实例化它们 可以在延迟作业或脚本等中实例化它们 如果
  • 前面的冒号:YAML 语法

    我目前在项目中使用 Sidekiq 并且有以下 YAML 配置文件 concurrency 5 pidfile tmp pids sidekiq pid logfile log sidekiq log staging concurrency
  • 没有路线匹配... Rails Engine

    所以我不断收到错误 No route matches action gt create controller gt xaaron api keys 测试中抛出的是 it should not create an api key for th
  • Rails 5.2.2(活动记录)WITH 语句

    我正在使用 Rails 5 2 2 并且有一个使用 WITH 语句的复杂查询 我需要使用左外连接创建该语句 我该如何做WITH活动记录中的语句 我的 TOTAL PROFILES 由查询对象驱动 并且会发生变化 而其余部分将始终保持不变 所
  • Rails:仅当满足某些条件时如何运行 before_save?

    我有一个 before save 方法 我称之为重命名上传的图像 before save randomize file name def randomize file name extension File extname screen f
  • Rspec:测试救援

    尝试测试我的函数是否能够正确地从异常中解救 更改参数 文件名 然后重试一次 我可以让函数接收第一次尝试 但无法让它接收第二次尝试 控制器 begin video get video video id rescue matches video
  • Ruby on Rails - 复选框未保存到数据库?

    我有一个迁移 它使用布尔值并在其视图中生成一个复选框 但是 无论我单击什么 保存到数据库的值都不会受到影响 我的迁移看起来像这样 def self up create table blogposts do t t string title
  • Rails 教程 - User.rb 文件错误

    我正在关注 Railstutorial org 第 7 章 我正在尝试运行该应用程序 但出现以下代码错误 该错误表明我需要在文件末尾添加另一个 结束 但我已经尝试过此操作 但没有成功 错误是 Users woshea rails sampl
  • 无法在 Windows 7 上安装 Rmagick 和 Imagemagick

    当我跑步时gem install rmagick 2 13 1 gem从 rmagick 2 13 1 gem 所在的目录中 我收到一个错误 指出它无法构建 gem 本机扩展 下面显示 c Ruby192 bin ruby exe extc
  • :autosave 忽略了 has_many 关系——我错过了什么?

    我有两门课 class Collection lt ActiveRecord Base has many items autosave true end class Item lt ActiveRecord Base belongs to
  • Rails Accepts_nested_attributes_for 子级在验证时没有设置父级

    验证时 我试图在子模型中访问我的父模型 我在 has one 上发现了一些关于反向属性的信息 但我的 Rails 2 3 5 无法识别它 因此它一定从未进入发行版 我不确定这是否正是我所需要的 我想根据父属性有条件地验证子属性 我的父模型已
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail

随机推荐