按 ActiveRecord 中的特定 id 排序

2024-01-24

我继承了另一个程序员的 Rails3 项目,总体来说我对 Rails 还很陌生。他有一个似乎按特定 ID 排序的查询。有人能解释一下这在实际的 SQL 中是如何解决的吗?我认为这段代码正在杀死数据库以及随后的 Rails。我尝试在记录器中输出它,但即使将配置设置为:debug,似乎也无法输出实际的 SQL。在这里(在 SO 上)大量搜索并没有找到这个查询的清晰解释。代码如下:

options = {
              select: "SUM(1) AS num_demos, product_id ",
              group:  "product_id",                
              order:  "num_demos ASC",
            }
  product_ids = Demo.where("state = 'waitlisted'").find(:all, options).collect{|d| d.product_id}
  sort_product_ids = product_ids.collect{|product_id| "id = #{product_id}"}   
  Product.where(visible: true, id: product_ids).order(sort_product_ids.join(', '))   

据我所知,最后一行将使用 ORDER BY“id = 1,id = 3,...”等对产品表创建一个查询,这对我来说没有多大意义。所有线索均受到赞赏。


快速分析正在发生的情况,因为它将帮助您了解如何处理替换查询。

options = {
              select: "SUM(1) AS num_demos, product_id ",
              group:  "product_id",                
              order:  "num_demos ASC",
            }
product_ids = Demo.where("state = 'waitlisted'").find(:all, options).collect{|d| d.product_id}

该行将生成

SELECT SUM(1) as num_demos, product_id FROM "demos" WHERE (state = 'waitlisted') GROUP BY product_id

并返回一个数组Demo对象,按count(*)组中的行数,其中只有product_id属性已加载,可供您使用。

Next,

sort_product_ids = product_ids.collect{|product_id| "id = #{product_id}"}   

结果是映射到格式的product_ids集合"id = x"。 IE: 如果前面的结果返回了10条结果,product_ids的范围是1..10,sort_product_ids现在相当于["id = 1", "id = 2", "id = 3", "id = 4", "id = 5", "id = 6", "id = 7", "id = 8", "id = 9", "id = 10"]

Finally,

Product.where(visible: true, id: product_ids).order(sort_product_ids.join(', '))

选择全部Products列所在的位置visible is true,以及他们的id是在数组中product_ids(正如我们之前发现的,它实际上是一个数组Demo对象,而不是整数 - 这可能会导致查询失败)。然后,它要求 SQL 按以下顺序对该结果列表进行排序:sort_product_ids(作为字符串发送"id = 1, id = 2, ... id = 10"而不是数组["id = 1", "id = 2", ... "id = 10"]).

更多信息请访问:http://guides.rubyonrails.org/active_record_querying.html http://guides.rubyonrails.org/active_record_querying.html http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html

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

按 ActiveRecord 中的特定 id 排序 的相关文章

  • Rails:关于产量

    我在a中看到了一些代码导轨 v2 3 app In layout car general html erb 这个视图是由 cars controller 中的方法调用的 我看到了代码 var some car new Object 有两个问
  • 使用 Minitest 测试自定义验证器

    我有多个带有电子邮件验证的模型 因此 我将验证提取到自定义验证器中 我按照以下教程做到了这一点导轨指南 http guides rubyonrails org active record validations html custom va
  • HABTM 关系和accepts_nested_attributes_for

    我有一个可以让我创建的表单新博客文章我希望能够创造新类别来自同一个表格 我在帖子和类别之间有一个习惯关系 这就是我遇到麻烦的原因 我有以下2个型号 class Post lt ActiveRecord Base has and belong
  • kaminari ajax 分页不更新分页

    我正在使用 kaminari gem 在 Rails3 中实现分页 我一直在关注github上的这段代码https github com amatsuda kaminari example commits ajax https github
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

    我有一个托管在 Heroku 上的项目 想要更改表的自动增量起始值 我在本地使用 SQLite3 Heroku 使用 PostgreSQL 这是我在迁移中所拥有的 class CreateMytable lt ActiveRecord Mi
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • 如何在 HAML 中为 Devise 生成视图

    这是我的 Gemfile gem haml group development do gem hpricot gem ruby parser end 然后我在终端 命令窗口中执行以下语句 bundle install rails gener
  • 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails

    我正在尝试在 Rails 应用程序中使用 Elasticsearch 设置 CircleCI 我想已经配置了镜像 但是如何在 CI 中连接到它 到目前为止我已经尝试过 https github com elastic elasticsear
  • ActiveRecord:向包含的 ON 子句添加条件

    我有一个模型报价和另一个历史报价 一个报价有很多历史报价 现在 我想立即加载一组报价的某一天的历史报价 如果存在 为此 我认为我需要将这一天传递给 ON 子句 而不是 WHERE 子句 以便我获得所有报价 即使在给定日期没有历史报价时也是如
  • 回滚后是否应该删除迁移

    我对 ruby 和 Rails 相当陌生 刚刚开始了解迁移 我的问题是回滚后删除迁移的最佳实践或正确时间是什么 到目前为止 我读到的内容是回滚后是否删除迁移的观点问题 但是在团队中工作时删除迁移是否有任何重大影响 以及保留迁移文件相对于删除
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上
  • 在 ActiveAdmin 或打印解决方案中动态更改分页

    我是 Activeadmin 和 Rails 的新手 我需要一些帮助 我有一个分页模型 我想允许用户更改分页值或完全禁用它 这样它就可以打印 到打印机 所有记录 或过滤后的记录 我知道我可以在 before filter 中使用 per p
  • Yii2:如何在ActiveRecord中设置默认属性值?

    这似乎是一个微不足道的问题 但是我能想到的所有明显的解决方案都有其自身的缺陷 我们想要的是能够仅为新记录设置任何默认的 ActiveRecord 属性值 使其在验证之前和验证期间可读 并且不会干扰用于搜索的派生类 一旦我们实例化该类 就需要
  • Rails 从 OrdersController 更新用户模型的属性

    这是我的代码 订单控制器类 def create order Order new params order if order purchase work GATEWAY store credit card options result wo
  • 多次部署后 Heroku Slug 大小

    我有一个红宝石 on Rails非常接近 slug 大小限制 300mb 的应用程序 我已经尽可能地减小了尺寸 slugignore但还没有得到我想要的结果 一时兴起 我尝试创建一个新的Heroku应用程序并向其部署相同的 git 存储库
  • 在 Rails 3 中访问 :not_found、:internal_server_error 等

    看起来像ActionController StatusCodes已从 Rails 3 中删除 我使用了 HTTP 状态代码的同义词 例如 200 gt ok 404 gt not found 500 gt internal server e
  • Rails 3 SSL 路由从 https 重定向到 http

    这个问题与此相关SO 问答 rails 3 ssl deprecation https stackoverflow com questions 3634100 rails 3 ssl deprecation建议使用routes rb和类似的
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid
  • rspec 中的模拟方法链

    有一系列方法可以获得user目的 我试图模拟以下内容以返回user in my Factory Girl current user AuthorizeApiRequest call request headers result 我可以模拟该

随机推荐

  • ASP.NET 5 beta 7 的共享类库参考

    在我们当前的环境中 我们有一些共享的公共库 C 类库 NET 4 5 1 csproj 项目 它们被 ASP NET 和控制台应用程序引用 我们正在考虑将 1 个 Web 项目升级到 ASP NET 5 以开始测试即将到来的一些新更改 由于
  • Flexbox 在 Safari 中添加 1px 左边距

    我在 Safari 向 Flexbox 行中第一个元素的左侧添加 1px 边距 间隙时遇到问题 我在下面附上了该问题的图片 弹性框 CSS 是 equal height display webkit box OLD iOS 6 Safari
  • 如何使用 apache poi 从公式单元格读取单元格值

    我正在尝试从 Excel 文件中读取所有数据 该文件也有一些公式单元格 但我不知道哪个单元格是公式单元格 无论单元格的类型如何 我如何读取单元格中的所有值 我的代码看起来像这样 FormulaEvaluator evaluator wb g
  • 如何命名 es6 类(针对 React 组件)

    这是 ES6 问题的一部分 React 问题的一部分 我正在尝试使用命名空间组件 https facebook github io react docs jsx in depth html namespaced components在 Re
  • Android 搜索图标未显示在操作栏上

    当我在 Android 上学习本教程时遇到了一个问题 正如主题中提到的 我的搜索图标没有显示在操作栏上 我在那一步遇到了问题 http developer android com training basics actionbar addi
  • 如果向量包含值,C++ 代码将不会运行

    我正在使用 VS Code 和 Vim Windows 操作系统 MSYS2 MingW GCC G V 11 2 0 编译器 如果我的代码包含向量 则运行代码时不会有输出 编译或运行代码时没有收到错误 警告 include
  • Python 中的过滤对象数组

    我正在使用 Python 来挖掘一个相当大的项目并挖掘有关它的信息 我能够创建一个数组ProjectFiles 但是我很难弄清楚如何过滤它 class ProjectFile def init self filename str numbe
  • github页面中的图像和相关链接

    我创建了一个用户的 github 页面 现在 假设我在存储库的根目录中有一个图像文件 位置为Images Emoticons Cool png 我尝试将该图像插入到我的主图像中Index html file 我写的 img src 线上和线
  • 在 GitHub 中,有没有办法查看所有分支上的所有(最近)提交?

    在 GitHub 中 有没有办法查看所有分支上的所有最近提交 最好按照时间倒序排列 也许我是个窥探者 但我希望能够看到我的开发人员最近做了什么 至少在对 github 存储库的提交方面 到目前为止 我见过的最接近的是网络图 这当然非常有用
  • 如何让unix脚本每15秒运行一次?

    我见过一些解决方案 包括监视和简单地在后台运行循环 和休眠 脚本 但没有一个是理想的 我有一个脚本需要每 15 秒运行一次 并且由于 cron 不支持秒 所以我不得不解决其他问题 在 UNIX 上每 15 秒运行一次脚本最稳健 最有效的方法
  • 使用加速缩放 Ycbcr (420f) 时的伪像

    我找不到任何有关如何调整 Ycbcr biplanar 大小的文档或示例 根据 Apple 的说法 Ycbcr biplanar 应该是您应该在 iOS 上使用的主要格式 我尝试像这样调整两个飞机的大小 resize luma vImage
  • 无法加载时区?

    我正在尝试将时区加载到我的 MySql 实例 在 Ubuntu 上运行 中 以便我可以使用 CONVERT TZ 函数 但是当我运行以下命令时 mysql tzinfo to sql usr share zoneinfo mysql u r
  • 为什么 .PHONY 在这种情况下不起作用?

    我有一个复杂的 makefile 似乎每次调用它时都会重新链接我的库和可执行文件 我能够将问题缩小到一个简单的 makefile 1 all prog 2 3 PHONY prog 4 prog prog exe 5 6 prog exe
  • Haskell 中的教堂数字

    我正在尝试使用以下定义在 haskell 中打印教堂数字 0 fx x 1 fx f x 哈斯克尔代码 c0 f x gt x c1 f x gt f x 当我在 haskell 控制台中输入它时 我收到一条错误消息 test gt c1
  • 错误Emacs slime:eval-buffer:符号的函数定义为void:define-slime-contrib

    我在短时间内使用 emacs 和 lisp 使用 slime 这个工作正常 但是今天当我运行它时出现以下消息 eval buffer 符号的函数定义为空 define slime contrib 这意味着我的 slime contrib 文
  • Visual Studio:如何管理项目之间共享的代码

    这可能之前已经发布过 但我不确定要查找什么搜索词 快速解释 我有一些项目之间共享的代码 该代码本身仍在进行中 问题是 每当我需要更新此代码时 我不想更新 3 次 这将成为一场噩梦 有没有办法将其添加到项目中 而不将其复制到项目文件夹中 即我
  • 定义 Spring AOP 后无法切换数据库

    我正在研究多租户架构 我们必须处理数据库的动态创建和切换 我面临的问题是 我在 AOP 级别编写了切换数据库的整个代码 然后在控制器或服务级别我无法进行另一个切换 AOP类 The type Api util Aspect Componen
  • Nock 在 Redux 测试中没有拦截 API 调用

    我正在尝试在 redux 应用程序中测试 api 调用 该代码几乎遵循中概述的模式异步动作创建者redux 文档的部分 http redux js org docs recipes WritingTests html http redux
  • 为什么 Gulp 无法在更改后自动重新处理我的 JS?

    In my gulpfile js JS改变自动触发两者BrowserSync重新加载和我的 JS 处理任务 但由于某种原因 虽然重新加载确实有效 但我的 JS 任务无法正确处理 JS 更改并在中创建新的 JS 文件dist 文件夹 我必须
  • 按 ActiveRecord 中的特定 id 排序

    我继承了另一个程序员的 Rails3 项目 总体来说我对 Rails 还很陌生 他有一个似乎按特定 ID 排序的查询 有人能解释一下这在实际的 SQL 中是如何解决的吗 我认为这段代码正在杀死数据库以及随后的 Rails 我尝试在记录器中输