Find_by_sql 作为 Rails 范围

2024-01-04

Sitepoint 的 r937 非常友善地帮助我找出从数据库返回正确结果所需的查询。

我需要的是能够使用这个查询作为范围,并且能够将其他范围链接到这个范围上。

查询是:

SELECT coasters.*
FROM (
    SELECT order_ridden,
           MAX(version) AS max_version
    FROM coasters
    GROUP BY order_ridden
) AS m
INNER JOIN coasters
ON coasters.order_ridden = m.order_ridden
AND COALESCE(coasters.version,0) = COALESCE(m.max_version,0)

我尝试制作一个像这样的范围:

  scope :uniques, lambda {
    find_by_sql('SELECT coasters.*
                 FROM (
                   SELECT order_ridden,
                          MAX(version) AS max_version
                   FROM coasters
                   GROUP BY order_ridden
                 ) AS m
                 INNER JOIN coasters
                 ON coasters.order_ridden = m.order_ridden
                 AND COALESCE(coasters.version,0) = COALESCE(m.max_version,0)')
  }

但当我尝试将另一台瞄准镜链接到它上面时,它失败了。有没有办法可以像正常范围一样运行这个查询?


find_by_sql返回一个Array。但你需要一个ActiveRecord::Relation链接额外的范围。

使用 ActiveRecord 方法重写查询的一种方法将返回ActiveRecord::Relation就是稍微重新排列一下,以便嵌套发生在INNER JOIN部分。

您可能想尝试以下操作:

scope :uniques, lambda {
  max_rows = select("order_ridden, MAX(version) AS max_version").group(:order_ridden)
  joins("INNER JOIN (#{max_rows.to_sql}) AS m
    ON coasters.order_ridden = m.order_ridden
   AND COALESCE(coasters.version,0) = COALESCE(m.max_version,0)")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Find_by_sql 作为 Rails 范围 的相关文章

  • Rails - 如何重写设计 SessionsController 以在用户登录时执行特定任务?

    使用 Devise 管理用户会话 注册 每次用户登录时 以及在他被 devise 重定向到连接的主页之前 我需要执行特定任务 例如 更新该特定用户的用户表中的某些字段 用户 我是否必须重写 devise SessionsController
  • SQL:计算高于组平均值的值

    如何使用 SQL 计算高于一组平均值的值 例如 我有桌子A with q t 1 5 1 6 1 2 1 8 2 6 2 4 2 3 2 1 第 1 组的平均值为 5 25 组内有两个值高于5 25 8和6 因此高于该组平均值的值的数量为
  • 用户表到用户和用户首选项。这是正常化了吗?

    我有一张桌子叫Users其偏好列表不断增加 这些首选项可以包括 ReligionId 它将连接到另一个包含宗教列表的表 偏好列表正在不断增加 我想把它分开Users表分成2个表 我认为行之有效的策略是制作一个单独的表 名为UserPrefe
  • 从一个页面导航到另一个页面时,JavaScript 不会执行

    我正在构建我的第一个 Ruby on Rails 应用程序 并尝试创建一个动画导航栏 我正在使用 jQuery 和 Turbolink 这是我的application js under app assets javascripts docu
  • Rails:自动加载库不起作用

    由于某种原因我的自动加载器无法工作 我遵循了一些教程 这是我的 config application rb 文件的样子 require File expand path boot FILE require rails all Bundler
  • Rails 路线、url 和子域

    我的 ruby 应用程序分为不同的命名空间 例如 免费 free domain com 专业版 pro domain com vip vip domain com 在路由文件中看起来像这样 namespace free do match h
  • 如何在oracle中预测和转义单引号'

    假设我有一个列值aaa gh它会在 oracle 中抛出错误 提示 sql 命令未正确结束 我的问题是如果我不知道有多少 在我的价值范围内 我如何才能安全地逃脱它们 最好的方法是使用引用字符串文字技术 http lalitkumarb wo
  • 将 HTML 导出为 PDF 时出现中文和日文字符编码问题

    我运行一个基于 Web 的时间线制作工具 让用户可以用 HTML JavaScript 创建时间线 然后将其导出到 PDF 文件以便在完成后进行打印 我有几个用户报告了当时间线包含某些 Unicode 字符时将时间线导出为 PDF 时出现的
  • Rails api 中阻止用户配置文件的最佳 HTTP 状态代码是什么?

    我在 Rails 中为社交应用程序编写了一个 API 这个应用程序就像Facebook一样 用户可以阻止其他用户 如果用户 A 阻止用户 B 则用户 B 无法查看用户 A 的个人资料页面 那么我应该返回的最佳 HTTP 代码状态是什么 40
  • 在 Ruby Net::HTTP.start 中为服务调用设置 read_timeout

    我想在我的 ruby 代码中覆盖服务调用的默认超时 我打开连接如下 res Net HTTP start task url host task url port do http http get tasks task id end 我尝试将
  • 帮助重构这个讨厌的 Ruby if/else 语句

    所以我有这个大而多毛的 if else 语句 我将跟踪号码传递给它 然后它确定它是什么类型的跟踪号码 我怎样才能简化这件事 具体来说就是想减少代码行数 if num length lt 8 tracking service false el
  • MySQL 布尔模式匹配对中间词不返回任何内容

    我在 MySQL 数据库中使用 Match Against 时遇到问题 希望有人能提供帮助 这是我的数据库中的数据示例 id name 1 really bitter chocolate 2 soft cheese 当我运行此查询时 SEL
  • 两个表中两个字段的总和

    我的数据库中有四个表 如下所示 表格发票 invcid customerid invoicedate tblInvc详细信息 ID invcid item itemprice itemquantity tblPay payid invcid
  • 在 cygwin 和 powershell 中查看不同的 gem 列表

    我用的是gem listpowershell 和 cygwin 中的命令都显示不同的 gem 列表 Cygwin 显示 LOCAL GEMS bundler 1 2 3 json 1 7 5 minitest 2 12 1 rake 0 9
  • Rails:包括外部 JavaScript

    我想使用 JavaScript 库 例如 jQuery 插件 我是否使用 Rails 资产管道 或者我应该将其包含在 javascript include tag 中 我有哪些选择以及推荐的做法是什么 您会仅在几个页面上还是在整个应用程序中
  • MYSQL从另一个表插入id

    我有以下疑问 我有 2 张桌子 id customers 1 alan 2 beth 3 john and id id customers value 1 1 bar 2 1 foo 3 2 baz 示例 我需要在第二个表中添加值 alfa
  • Rails:通过关联has_many,以及创建新实例的形式

    我对 Rails 还很陌生 只是想通过建立关联来获得我的第一个 has many 食谱有很多成分 每种成分都有食谱所需的量 成分量表具有配方是 成分是 以及量 创建新食谱时 我希望能够在同一位置创建这些食谱 成分关联 最后 我将为配料构建一
  • 如何复制身份列中的数据?

    我有一张桌子identity列在一台服务器中 并且在另一台服务器中有一个具有相同结构的其他表 现在我想将所有数据从一个表复制到另一个表 但我无能为力 我已经创建了一个链接服务器 我用这个 insert into server databas
  • 如何使用JSqlParser向sql添加where条件?

    我想用JSqlParser向sql添加where条件 例如 Before select from test table where a 1 group by c After select from test table where a 1
  • 在 SQL 中用加号 (+) 显示正结果

    我有以下查询 SELECT CONVERT DECIMAL 11 1 SUM Column 1000 1 AS NAME FROM Table 我有 1000 1 的原因是我希望结果以千为单位显示并反转 负值作为正值 反之亦然 只有一位小数

随机推荐

  • CC.Net 中修改Reader 任务的示例?

    我正在尝试建立一个构建链 通过各个构建阶段传播修改历史记录 我的第一个想法是修改写入器 修改读取器对 但我无法让读者读取结果 有人有任何例子或提示吗 我使用的是最新的CC NET 1 4 4 SP1 谢谢 玩了一会就明白了 请注意 您需要最
  • 在 gdb 会话中选择调试信息文件的子集

    在我的 Fedora 盒子上我安装了很多单独的调试信息 sudo dnf debuginfo 安装
  • 用Java向多个收件人发送邮件

    我想使用以下方法向多个收件人发送消息 message addRecipient Message RecipientType TO String arg1 Or message setRecipients Message RecipientT
  • 对于 Windows 窗体来说,PostMessage to self 相当于什么?

    我正在编写一个源自的自定义控件System Windows Forms Control 该控件正在使用Control KeyDown事件 观察击键 我应该处理一些击键 例如
  • 识别相同 OleDbException 类型的异常

    我有以下代码来验证另一个应用程序是否以独占模式打开 MSAccess 2003 数据库 数据库已有密码 OleDbConnectionStringBuilder conString new OleDbConnectionStringBuil
  • 将矩阵图像定位在图像视图的中心

    我创建了一个图像库 一切正常 需要放大和移动图像 ImgView setScaleType ImageView ScaleType MATRIX 当我这样做时 我得到的图像很小 所以我调用了该方法 scaleFactor view getW
  • C# 将函数源代码转换为字符串

    在 C 中 有没有办法将函数的源代码转换为字符串 有点像 JavaScript 中的实现方式 我需要这个 因为我正在为 Asp Net 控件编写一些文档 并且希望在结果旁边显示原始源代码 而不是复制 粘贴它 简短的回答 不 长答案 您可以使
  • android 上的 chromium 中的 kiosk 模式或全屏模式

    我已经为我的 Android 设备构建了一个 chromium ContentShell 如下所述 https code google com p chromium wiki AndroidBuildInstructions https c
  • plpgsql CREATE FUNCTION 在“CREATE”处或附近出现语法错误

    即使我清空所有 DECLARE 块和 BEGIN END 块并尝试返回一个字符串 似乎也无法将此函数创建为 Create 谁能帮我解决我在这里做错的事情吗 尝试在 pgAdminIII Ubuntu 中执行此命令 CREATE OR REP
  • 如何获取给定字符串中数字字符的总数? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何计算字
  • 每个标记的可变宏扩展

    假设我有一个宏 一个只调用函数的简单宏foo对于不同类型 define FOO type foo type 一次 假设我想将这个东西称为多种不同类型 具体来说 foo int foo float foo point2d 我想用一个名为的宏生
  • Docker-compose 默认排除服务

    如果我在 docker compose 项目中定义了很多服务 如何从默认服务中排除某个服务docker compose up命令 例如 我有一个 nginx 服务和一个 ssl 服务 它们发生冲突 因为它们都消耗端口 80 所以我怎样才能使
  • Java 模式在“ABC”中查找两组两个字母

    我有一个这样定义的模式 private static final Pattern PATTERN Pattern compile a zA Z 2 在我的代码中我正在这样做 Matcher matcher PATTERN matcher m
  • 我想在android中读取图像中的exif信息。我可以从图库中的图像读取 exif,但无法读取从相机拍摄的 exif 照片

    如上图所示 我选择的是拍照 exif信息为空 我从手机选项中选择了图像 并且 exif 信息不为空 现在可以通过 ExifInterface 支持库从流中读取 EXIF 数据 compile com android support exif
  • textarea 的 window.getSelection() 在 Firefox 中不起作用?

    我正在尝试获取 HTML 页面上的选择文本 我使用下面的代码 并且window getSelection 文本区域接缝在 Firefox 中不起作用 但在 Google Chrome 中运行良好 我使用的是 Firefox 24 和 chr
  • 在android中安装应用程序时创建文件夹

    我们可以在应用程序安装期间在设备的内部存储上创建一个目录吗 创建该目录后 我需要将一些图像和音乐从我们的 res 文件夹复制到该目录 有人对在安装时创建目录有什么想法吗 提前致谢 public void onCreate Bundle sa
  • 如何查看用C/C++编写的函数的源代码? [复制]

    这个问题在这里已经有答案了 一般来说 用 R 编写的函数的源代码只需在 R 控制台上输入函数名称即可查找 对于用 C 或 C 编写的函数如何做到这一点 例如当我尝试查找代码时lapply 函数 它向我展示了这个 function X FUN
  • 减少寻找 N 线交点所需的时间

    有N水平或垂直的线段 现在我需要找出交点总数和每条线段的交点总数 N可以达到100000 我尝试检查每一对线 答案是正确的 但我需要减少它所花费的时间 这是我的代码 using namespace std typedef struct Po
  • 在 Android 中检查并启用磁传感器校准

    我在 Android 应用程序中使用磁传感器校准来实现增强现实 当应用程序长时间使用时 传感器校准会逐渐减少 有没有办法检查校准并自动启用或提示用户再次进行手动校准 不幸的是 对于 AR 类型的应用程序 我不知道如何知道磁传感器是否已正确校
  • Find_by_sql 作为 Rails 范围

    Sitepoint 的 r937 非常友善地帮助我找出从数据库返回正确结果所需的查询 我需要的是能够使用这个查询作为范围 并且能够将其他范围链接到这个范围上 查询是 SELECT coasters FROM SELECT order rid