按指定顺序按 id 查找 ActiveRecord 对象的简洁方法

2023-11-21

我想获取给定 id 数组的 ActiveRecord 对象数组。

我假设

Object.find([5,2,3])

将返回一个依次包含对象 5、对象 2、对象 3 的数组,但我得到的数组按对象 2、对象 3、对象 5 的顺序排列。

ActiveRecord 基础查找方法API提到您不应该期望它按照提供的顺序出现(其他文档没有给出此警告)。

中给出了一种可能的解决方案按相同顺序的 ids 数组查找?,但 order 选项似乎对 SQLite 无效。

我可以编写一些 ruby​​ 代码来自己对对象进行排序(要么有点简单但缩放效果较差,要么缩放效果更好但更复杂),但是有更好的方法吗?


MySQL 和其他数据库并不是自己对事物进行排序,而是它们不对其进行排序。你打电话时Model.find([5, 2, 3]),生成的 SQL 类似于:

SELECT * FROM models WHERE models.id IN (5, 2, 3)

这不指定顺序,只指定您想要返回的记录集。事实证明,一般MySQL会返回数据库行'id'订单,但无法保证这一点。

让数据库按保证顺序返回记录的唯一方法是添加 order 子句。如果您的记录始终以特定顺序返回,那么您可以向数据库添加一个排序列并执行Model.find([5, 2, 3], :order => 'sort_column')。如果不是这种情况,则必须在代码中进行排序:

ids = [5, 2, 3]
records = Model.find(ids)
sorted_records = ids.collect {|id| records.detect {|x| x.id == id}} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按指定顺序按 id 查找 ActiveRecord 对象的简洁方法 的相关文章

  • 如何使用 Sqlite3 用列表中的值更新整个列

    我有一个数据集本地存储在 sqlite3 数据库中 我提取了一列 执行了一些操作 现在想要替换数据库列中的所有值 我怎样才能做到这一点 保证列和列表的长度相同 我只想用新值更新表 有没有一种简单的方法可以一次性完成这一切 使用Python
  • 如何创建与 ActiveResource 对象的 ActiveRecord 关系?

    假设我正在为一家已经拥有 People 应用程序的出版公司编写一个图书馆应用程序 所以在我的图书馆应用程序中我有 class Person lt ActiveResource Base self site http api people m
  • save_and_open_page 已停止提供我的 CSS

    我的测试设置工作得很好 每当我打电话时 都能提供正确格式的 css 页面save and open page从测试中 然后 我设置了一些 javascript 测试 并对我的设置进行了一些更改 抱歉 我无法详细说明所有内容 我没有足够详细地
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

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

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails

    我正在尝试在 Rails 应用程序中使用 Elasticsearch 设置 CircleCI 我想已经配置了镜像 但是如何在 CI 中连接到它 到目前为止我已经尝试过 https github com elastic elasticsear
  • 自定义通用 Rails 错误消息

    我们的 Rails 应用程序被设计为链接到多个客户端数据库的单个代码库 根据子域 应用程序确定要连接到哪个数据库 我们使用液体模板为每个客户定制演示文稿 我们无法为每个客户定制通用的 我们很抱歉 出了点问题 消息 谁能推荐一种方法让我们能够
  • 有时您可能需要重新启动 Webrick 才能看到所做的更改,这是否正确?

    我听 Kevin Skoglund lynda com 说 养成在开发过程中频繁重新启动 Webrick 的习惯是一个很好的习惯 虽然通常您不需要重新启动 Webrick 来查看更改 但他暗示在某些特殊情况下可能需要这样做 有谁知道这些情况
  • Rails 3.1 和图像资源

    我已将管理主题的所有图像放入名为 admin 的文件夹内的资产文件夹中 然后我像平常一样链接到它 Ruby image tag admin file jpg CSS logo background url assets images adm
  • Rails 4 的 mobile_fu

    我正在尝试将我的应用程序从 Rails 3 2 13 切换到 Rails 4 在此过程中 我遇到了一个主要障碍 我使用 gem mobile fu 来确定用户是否来自移动设备 该 gem 需要 Railties 3 2 13 但 Rails
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 为什么||和 或 在 Rails 中的行为有所不同? [复制]

    这个问题在这里已经有答案了 可能的重复 i true 和 false 在 Ruby 中是真的吗 https stackoverflow com questions 2802494 i true and false in ruby is tr
  • 多次部署后 Heroku Slug 大小

    我有一个红宝石 on Rails非常接近 slug 大小限制 300mb 的应用程序 我已经尽可能地减小了尺寸 slugignore但还没有得到我想要的结果 一时兴起 我尝试创建一个新的Heroku应用程序并向其部署相同的 git 存储库
  • 无法使用 Rails 6 Actiontext 渲染 youtube 嵌入 iframe

    我已经设置了一个自定义嵌入模型 这样我就可以将 Instagram 或 YouTube 嵌入等内容添加到我网站上的 ActionText 内容中 它适用于 Instagram 嵌入 但不适用于 YouTube 作为参考 我要显示的 yout
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • 创建一个默认为零的工厂关联?

    在factories rb 文件中使用FactoryGirl gem 如何创建一个关联默认为nil 的工厂 我正在思考以下几点 Factory define user do factory factory association post
  • 在 mac os Sierra 上,卡在“设置 CocoaPods 主存储库”上

    转移到 mac os sierra 后 我完全格式化了我的 mac 现在每次运行时我都面临安装 cocoapods 的问题sudo gem install cocoapods pre一切都安装得很好 当我尝试安装 Pod 时 终端堆栈打开S
  • 在rails生成脚手架中跳过JSON格式

    当您使用类似命令生成 Rails 脚手架时rails g scaffold Thing有什么办法可以避免变得烦人吗 respond to do format format html index html erb format json re
  • 将 Rack::Deflater 插入机架中的哪个位置?

    我目前有以下内容 use Rack Rewrite use Rack Cache verbose gt true metastore gt memcached localhost 11211 rack cache meta entityst
  • Rails 3 SSL 路由从 https 重定向到 http

    这个问题与此相关SO 问答 rails 3 ssl deprecation https stackoverflow com questions 3634100 rails 3 ssl deprecation建议使用routes rb和类似的

随机推荐

  • 在 Visual Studio 2008 中使用自定义安装程序时出现错误 1001

    我创建了一个简单的 winforms 应用程序和一个自定义安装程序 这一切看起来很简单 但我在事件日志中收到以下弹出窗口和错误详细信息 来自源 MsiInstaller 的事件 ID 11001 的描述无法 成立 引发此事件的组件未安装在
  • kafka.consumer.SimpleConsumer:由于套接字错误而重新连接:java.nio.channels.ClosedChannelException

    我正在为 kafka 运行一个简单的消费者 如下所示 int timeout 80000 int bufferSize 64 1024 consumer new SimpleConsumer host port timeout buffer
  • 如何序列化异步/等待?

    假设我有这个简单的片段 async void button Click object sender RoutedEventArgs e await Task Factory StartNew gt Console WriteLine sta
  • 与 Python 的代理连接

    我一直在尝试从 python 连接到 URL 我努力了 urllib2 urlib3 和请求 我在所有情况下都遇到同样的问题 一旦我得到答案 我想他们三个都会工作得很好 问题是通过代理连接 我已经输入了我们的代理信息 但没有得到任何快乐 我
  • 如何在 PHP 中对具有依赖关系的方法进行单元测试?

    我有一个带有一些逻辑的方法 但我不确定如何对其进行单元测试 因为它是针对此特定方法的单元测试 所以它应该在不连接到数据库的情况下运行 我读过有关存根和模型的内容 但我找不到将它们应用于这种情况的方法 我想强制 Client GetClien
  • kaminari 未定义方法 `total_pages'

    在使用 kaminari 时 我遇到了错误 Gemfile gem will paginate gt 3 0 6 gem will paginate bootstrap gem kaminari 列表控制器 rb def index if
  • 在变量声明中使用冒号[重复]

    这个问题在这里已经有答案了 最近有人问我这在 Python 中意味着什么 gt gt gt char str 我不知道 我检查了文档 没有类似的内容 一个建议是它是静态类型声明 但文档中也完全没有关于这一点的内容 有了上面的内容 如果我 g
  • 动态加载部分视图

    对于一个项目 我需要一种加载部分视图的动态方式 最好是通过 jquery ajax 这是我需要的功能 用户输入表单 将显示一个下拉列表 并使用一些输入控件呈现通用部分视图 用户在下拉列表中选择不同的值 局部视图刷新 根据下拉列表的值 它应该
  • 的内容在哪里' aria-label='getChildHtml('right') ?> 的内容在哪里'> getChildHtml('right') ?> 的内容在哪里

    我正在尝试重新组织我的右侧边栏 在模板 右2列 中 它调用 我在哪里可以找到这个变量的内容 对方法的调用getChildHtml 使用传递给方法的名称加载子块的 HTML 因此在本例中我们正在寻找名为的子块right 为了确定在哪里找到这个
  • asp.net“已达到网络 BIOS 命令限制”ASP.NET 2.0 + 3.5

    我正在尝试在 ASP NET 2 0 3 5 中运行 tinyMCE 文本编辑器 但我的 web config 文件中出现以下错误 加载配置文件时发生错误 无法开始监视对 Visual Studio 2005 WebSites TinyMC
  • 如何将 NSRect 更改为 CGRect?

    void drawRect NSRect rect imgRect orgin NSZeroPoint imgRect size appleImage size drawRect self bounds appleRect drawInRe
  • Fragment.onCreateView 具有空容器

    以下代码在 Android 1 6 上运行 因此我使用片段的兼容性包 在下面的TestFragment是一个静态嵌套类 public class FragmentTestActivity extends FragmentActivity O
  • 补丁请求 Android Volley

    我目前正在一个项目中使用 Android 的 Volley 网络库 我已经从以下位置拉下了凌空的主分支https android googlesource com platform frameworks volley 所以我的库项目应该是最
  • R .libPaths() RStudio 和命令行 R 之间的区别

    当我从命令行运行 R 时 gt library ggplot2 gt path package ggplot2 1 home yang R x86 64 pc linux gnu library 2 13 ggplot2 gt libPat
  • 为 iOS(iPhone 和 iPad)制作两个故事板

    是否可以只制作一个应用程序 并在其中制作两个故事板 一个用于 iPhone 一个用于 iPad 我不喜欢在 iPad 上运行应用程序并单击 2x 按钮的想法 我的想法是创建两个故事板 并有一个入门课程 该课程将检查您使用的设备是 iPhon
  • 如何使用 Python 和 Gracenote 识别音乐样本?

    我最近发现了GNSDK Gracenote SDK 似乎提供了多种编程语言的示例 通过指纹识别音乐样本 然后请求其音频数据库获取相应的艺术家和歌曲标题 但文档太糟糕了 如何使用 Python 和 GNSDK 执行音频样本文件的识别 提供的文
  • SBT 0.10 和 IDEA 初学者指南

    我是 SBT 新手 不确定如何开始项目 有人可以向我指出创建 Hello World 类型项目的初学者指南 或者给我一些线索吗 我首选的 IDE 是 IDEA 我跑了sbt idea根据说明IDEA 插件页面 目前我有点困惑 因为 没有创建
  • 从 Rails 返回文件

    初学者铁路问题 如何从 Rails 中的控制器返回文件 我熟悉返回 渲染 JSON 对象 但是我从未返回 渲染带有任意扩展名的文件 从阅读周围所以听起来像render nothing gt true有帮助 我只是在寻找一些指导或相关文档 您
  • 如何使用 dplyr 编程语法来创建和计算变量名称

    我想使用 dplyr 编程语法动态输入变量名 但是 正如许多人所描述的那样 这可能非常令人困惑 我尝试过各种 quo enquo 的组合 等等都无济于事 这是我的代码的最简单形式 library tidyverse df lt tibble
  • 按指定顺序按 id 查找 ActiveRecord 对象的简洁方法

    我想获取给定 id 数组的 ActiveRecord 对象数组 我假设 Object find 5 2 3 将返回一个依次包含对象 5 对象 2 对象 3 的数组 但我得到的数组按对象 2 对象 3 对象 5 的顺序排列 ActiveRec