Rails 使用哈希数组查找记录

2024-03-01

(使用字段选择“按字段对查询”in clause)

我有一个哈希数组,如下所示:

[ {product_id: 7629, group_id: 4}, {product_id: 8202, group_id: 3} ]

我想返回的是所有的记录Items与数组中的字段对匹配的表。

在 SQL 中,它将像这样被检索:

SELECT * 
FROM items
WHERE (product_id, group_id) IN (VALUES (7629,4), (8202,3))

但我在使用 Rails 时遇到了麻烦.where条款。这可能吗?


我想不出有什么方法可以在不诉诸 SQL 的情况下做到这一点,即使使用 Arel 也是如此。

由于数组不能被引用,我们必须做一些愚蠢的事情才能仍然允许它被清理。这不是一个great解决方案,但它是一个有效的解决方案。

your_hashes = [ {product_id: 7629, group_id: 4}, {product_id: 8202, group_id: 3} ]

# turn hashes into simple value array
conditions = your_hashes.map { |h| [ h[:product_id], h[:group_id] ] }
=> [[7629, 4], [8202, 3]]

# create a list of "(?)" values that will allow the conditions to be passed in
values = ("(?)," * conditions.length)[0..-2]
=> "(?),(?)"

# use it to look up the values
Model.where("(product_id, group_id) IN (VALUES #{values})", *conditions)

# this is the generated sql:
SELECT "models".* FROM "models" WHERE ((product_id, group_id) IN (VALUES (7629,4),(8202,3)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 使用哈希数组查找记录 的相关文章

随机推荐

  • 如何改进这个平方根方法?

    我知道这听起来像是一项家庭作业 但事实并非如此 最近我对用于执行某些数学运算的算法感兴趣 例如正弦 平方根等 目前 我正在尝试编写巴比伦方法 http en wikipedia org wiki Babylonian method Baby
  • 如何从python中的pandas数据框中的列中提取关键字(字符串)

    我有一个数据框df它看起来像这样 id Type agent id created at 0 44525 Stunning 6 bedroom villa in New Delhi 184 2018 03 09 1 44859 Villa
  • 前向声明不适用于转换运算符

    考虑下一个代码 include
  • Android:以编程方式在 EditText 内居中文本

    有没有办法让输入的文本居中EditText场地 更具体地说 光标不应从框的左侧开始 而应从中心开始 并在填充输入时向外向左移动 你应该使用 textView setGravity Gravity CENTER HORIZONTAL
  • 通过 PEAR 安装 phpunit 后如何获得 phpunit.bat?

    我需要 phpunit bat 来配置我的 NetBeans IDE 我在用着wamp http www wampserver com 我只需使用以下说明通过 pear 安装 phpunit 在开始使用 PEAR 之前 请从以下位置下载最后
  • 如何找到我的 MySQL URL、主机、端口和用户名?

    我需要找到我的 MySQL 用户名 当我打开 MySQL 命令行客户端时 它只询问我的密码 我不记得我的用户名了 为了与 JDBC 连接 我需要 URL 主机和端口号 我在哪里可以找到所有这些 如果您已经登录命令行客户端 请尝试以下操作 m
  • 在 Geodjango + Postgres 中存储圆

    希望在 geodjango 字段中存储一个圆 以便我可以使用 geodjango 查询 contains 来查找圆中是否有一个点 类似于使用 PolygonField 可以完成的操作 目前将其存储为十进制半径和 GeoDjango 点字段
  • 如何使用 Google Calendar API v3/Google API 客户端库显示*所有*可用日历的列表?

    我一直在尝试使用 PHP 访问 Google Calendar API v3 最初 我想简单地列出我可以通过 API 调用访问的用户日历 为此 我下载了 Google API PHP 客户端库 并尝试使用以下代码 经过我的改编 来自http
  • IIS 7.5 上的 MVC5 路由错误 (404.0) 错误

    一个古老的故事是 在开发机器上一切正常 但在主机服务器上却不行 HTTP 错误 404 0 未找到 模块IIS 网络核心 通知地图请求处理器 处理程序静态文件 错误代码0x80070002 尝试通过添加在开发机器上产生相同的错误
  • 使用参数时“Between”运算符生成错误的查询计划

    我有一个简单的日期表 Date DateID 其中包含 1900 年 1 月 1 日到 2100 年 12 月 31 日之间的日期列表 当使用从表中选择时between运算符和硬编码参数值 我得到了一个正确的查询计划 其中有 3 个估计行与
  • 使用多个参数注册 DbContext

    我正在尝试将 TenantProvider 注入 DbContext public class AppDbContext IdentityDbContext
  • Django 装置使用默认值保存

    我正在使用 Django 1 7 但我的装置有问题 我希望 Django 使用默认值或使用save 方法来创建未指定的值 这是我当前的对象 File uuidable py import uuid from django db import
  • Java中共享内存的任何概念

    AFAIK Java中的内存是基于堆的 内存是动态分配给对象的 并且没有共享内存的概念 如果没有共享内存的概念 那么Java程序之间的通信应该是很耗时的 在 C 中 与其他通信模式相比 通过共享内存进行进程间通信更快 如我错了请纠正我 另外
  • 访问“仅差异”ZFS 快照

    有没有办法挂载仅包含特定于快照的文件的虚拟分区 我知道隐藏的 zfs 目录 但它包含快照时的所有文件 我的目标是使差异备份更快 提前致谢 greg 尽管安德鲁的建议zfs send如果您只是想 这是使用差异快照的正确方法see差异并在您自己
  • 无法将 python 配置为代理

    与我的问题相关的早期帖子都无法为我提供解决方案 所以我在一个新线程中发帖 我通过大学中经过身份验证的代理连接到互联网 所以在浏览器中 我输入我的用户名密码 但是我无法在 python 中下载数据 我在 python 2 7 中输入以下 4
  • 有没有办法将 Google colab 环境保存到某个地方并重新使用它?

    我尝试过 virtualenv 和 conda 它已成功安装 但我无法激活虚拟环境 然后我考虑将 Colab 环境 我的意思是已安装的库 保存到某个地方 也许是 Google Drive 然后我可以重用它 是否可以 对于提问者以及因同一问题
  • 您更喜欢哪种方法来改进 Maven 项目的增量构建?

    我将优化构建项目的时间 最耗时的事情之一是项目的编译 由于这里特别提到的 Maven 的已知问题 Maven增量构建 https stackoverflow com questions 6281699 maven incremental b
  • 与alignas语法作斗争

    我正在尝试使用alignas对于属于类成员的指针 坦率地说 我不确定应该把它放在哪里 例如 class A private int n alignas 64 double ptr public A const int num n num p
  • 使用 mat-paginator 和 mat-table 使用可观察数组作为数据源

    我使用可观察数组作为数据源 这工作正常 只是我现在无法弄清楚如何使用分页器 下面是html和ts html table class mat elevation z8 table
  • Rails 使用哈希数组查找记录

    使用字段选择 按字段对查询 in clause 我有一个哈希数组 如下所示 product id 7629 group id 4 product id 8202 group id 3 我想返回的是所有的记录Items与数组中的字段对匹配的表