Rails ActiveRecord:如何在 jsonb 上使用带双引号的绑定变量

2024-03-30

我有一个 postgres jsonb 查询如下:

Blog.where("upload_data @> '[ { \"name\": \"#{name}\" }]'")

它可以工作,但会破坏构建,因为优秀的刹车员指出了可能的 SQL 注入风险。如果我使用绑定变量:

Blog.where("upload_data @> '[ { \"name\": ? }]'", name)

它创建一个 sql 查询,例如:

WHERE upload_data @> '[ { "name": 'name' }]'

请注意单引号 - 这是无效的查询

如果我使用单引号,我会得到:

WHERE upload_data @> "[ { 'name': 'name' }]"

这是无效的

我尝试了其他一些方法,但我想要的是将绑定变量计算为带双引号的字符串:

WHERE upload_data @> '[ { "name": "name" }]'

或者一个不同的解决方案 - 除了让刹车员跳过文件之外。


您不能将参数占位符放在带引号的字符串内。

Rails 允许您执行此操作并在单引号字符串中替换单引号字符串,这一事实表明 Rails 未能(像往常一样)理解 SQL 规则。

但是您可以将参数占位符与其他字符串一起放入表达式中。我不是普通的 PostgreSQL 用户,但我假设您可以将字符串连接在一起以形成完整的 JSON 文字:

Blog.where("upload_data @> '[ { \"name\": \"' || ? || '\"}]'", name)

您可能会发现,如果参数化整个 JSON 值,您的代码会更加清晰。使用%Q()以避免需要反斜杠文字双引号。

Blog.where("upload_data @> ?", %Q([ { "name": "#{name}" } ]))

或者为了确保生成有效的 JSON,我将表达式放入 Ruby 语法中,然后转换为 JSON:

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

Rails ActiveRecord:如何在 jsonb 上使用带双引号的绑定变量 的相关文章

  • 使用登录名(用户)创建 PostgreSQL 9 角色只是为了执行函数

    我多年来一直在寻找这个 并且尝试了网络上的所有方法但没有成功 我可以在 MSSQL 中做到这一点 但我没有找到在 PostgreSQL 中做到这一点的方法 我想要实现的只是创建一个具有登录名的角色 该角色无法创建 删除或更改数据库 函数 表
  • 捆绑包 - 从另一台电脑复制粘贴宝石

    我正在尝试设置 Rails 应用程序 该应用程序依赖于大量的宝石 宝石已预先安装在vendor gems我从朋友那里获得的副本的文件夹 现在 考虑到那些闭源宝石的不可用性 bundle install path home umang pro
  • Alembic 无法识别 False 默认值

    在维护 SQLAlchemy 数据模型并利用 alembic 进行版本控制时 我所做的以下代码更改导致了空修订 some column Column Boolean nullable False default False 以前是 some
  • 新手:我的例子中的文本替换

    In my 红宝石 on Rails应用程序中 我的助手中有一个方法 它通过以下方式打开文件 content File open myfile txt The 文件内容就好像 my car my seat my age my son my
  • Rails 4 - 将地址保存为数据库中的一列

    我是 Rails 新手 正在开发一个简单的应用程序 我的 ERD 中有一个名为 Client 的模型 并且希望保存每个客户的地址 我最初的想法是将地址保存为单独的字段 即 rails g model Client address first
  • sqlalchemy 的 row_to_json 语法

    我想弄清楚如何将 Postgres 9 2 row to json 与 SqlAlchemy 一起使用 但是我无法想出任何有效的语法 details foo row q select Foo where Foo bar id Bar id
  • 将数组文字传递给 PostgreSQL 函数

    我有一个包含 select 语句的 Postgres 函数 我需要使用包含字符串值数组的传入变量添加条件 CREATE OR REPLACE FUNCTION get questions vcode text RETURN return v
  • 2015 年重新审视 Ember Handling 401

    我可以在 Ember Ember Data 中找到大量询问 回答如何从 Rails 后端处理 401 的老问题 许多 如果不是全部的话 在这一点上似乎已经过时了 我已经尝试了我能找到的一切 Ember 数据处理 401 https stac
  • Ruby on Rails:simple_form + Twitter Bootstrap 未显示

    我正在为我的网站上的新用户创建一个简单的注册表单 我已经运行了 simple form bootstrap 的安装 rails g simple form install bootstrap 但是 它仍然没有显示并呈现为正常的 simple
  • Capybara 2.0 和 rspec-rails -- 助手在规范/功能中不起作用

    我正在尝试使用辅助模块中的方法 但 rspec 似乎无法识别辅助程序以进行测试spec features 请注意 唯一的更改是spec helper rb正在添加require capybara rspec 我尝试移动helper rb t
  • 如何对 mongodb/mongoid 脚本进行基准测试,以比较两种不同的查询技术

    您对如何测试两种不同的 mongoid mongodb 查询实现的性能有什么建议吗 要比较的实现与以前的相关 问答 https stackoverflow com questions 10121977 extracting modellin
  • 如何在查询中生成序列号?

    我们使用 PostgreSQL v8 2 3 如何在查询输出中生成序列号 我想显示查询返回的每一行的序列号 例子 SELECT employeeid name FROM employee 我希望生成并显示从一开始的每一行的序列号 你有两个选
  • 设置约束可延迟在 PostgreSQL 事务上不起作用

    情况是这样的 我有两个表 其中一个引用另一个 例如 table2 引用 table1 创建这些表时 我确实将外键约束设置为 DEFERRABLE 将 ON UPDATE 和 ON DELETE 子句设置为 NO ACTION 这是默认值 但
  • Rails 3.2 开发模式不显示带有回溯等的完整错误页面

    我刚刚升级到 Rails 3 2 一切正常 除了错误页面不再显示正常的开发调试信息 相反 它显示标准生产错误页面 白色背景 中间有红色文本 很抱歉 出了点问题 我们已收到有关此问题的通知 我们会尽快查看 Rails 3 2 是否有新的设置或
  • mod_http_upload - 使用 Ruby on Rails 上传 HTTP 文件 (XEP-0363)

    我想在我的聊天应用程序中的用户之间传输图像 我正在使用 ejabberd 服务器进行聊天 据我发现 可以做到这一点的模块是mod http upload HTTP 文件上传 XEP 0363 我不知道如何实现这一点 任何人都可以帮助我弄清楚
  • Rails simple_form:自定义输入id

    我想把用Rails simple form生成的几个表单放在一页上 并用javascript对它们进行操作 然而 simple form 为表单中的各个输入生成了相同的 id 因此我想用我自己的 id 替换生成的 id 现在我有一行 和 H
  • Rails:测试需要访问 Rails 环境的助手(例如 request.fullpath)

    我有一个可以访问的助手request fullpath 在孤立的辅助测试中 request不可用 我应该怎么办 我可以以某种方式嘲笑它或类似的东西吗 我正在使用最新版本的 Rails 和 RSpec 这是我的助手的样子 def item a
  • 尝试使用 Rails 和 PostgreSQL 生成模型时,命令挂起且没有错误

    使用该命令时 rails generate model Event name string 什么也没发生 我必须按 CTRL c 我使用的版本是 红宝石 2 1 1p76 导轨4 1 0 PostgreSQL 9 3 4 Mac OS X
  • 指定的 sqlite3 gem 未加载

    虽然我对 Ruby on Rails 比较陌生 但我开发应用程序已经有一段时间了 我似乎遇到的问题是 当我创建一个新的 Rails 应用程序 本地 使用 c9 时 当我启动 apache 服务器时 我似乎收到此错误 Specified sq
  • Django Channels Postgres InterfaceError:连接已关闭

    我似乎无法理解这里的问题 我正在为我的渠道消费者编写测试文档中的描述 https channels readthedocs io en latest topics testing html 我通常会使用 Django 默认的单元测试 但由于

随机推荐

  • 如何在 http 响应正文中返回编码字符串?

    将编码字符串添加到 http 响应似乎会用 F MISSING 替换某些字符 如何防止这种情况发生 Output encodedText M6c8RqL61nMFy F 缺失 hQmciSYrh9ZXgVFVjO Code package
  • 在方法调用中传递“this”是java中可接受的做法

    在方法调用中传递当前对象是好 坏 可接受的做法 如 public class Bar public Bar public void foo Baz baz modify some values of baz public class Baz
  • 如何使用 CLI 在 Windows 操作系统中将 Node.js 6.x 更新到 8.x

    我无法在 Node js 6 x 上运行 Angular 6 CLI 它显示错误 升级最低 Node js 8 xx 以使用 Angular CLI 我尝试使用以下代码 npm install g npm windows upgrade n
  • Java 编译器:停止抱怨死代码

    出于测试目的 我经常开始在现有项目中输入一些代码 因此 我想要测试的代码位于所有其他代码之前 如下所示 public static void main String args char a System out println int a
  • C++ 变量定义中的“class”关键字

    在有人问之前 是的 这是家庭作业的一部分 是的 在问之前我做了很多谷歌搜索 我花了最后一个小时在谷歌上用很多很多不同的关键词进行了集中搜索 但就是找不到任何东西 那么问题来了 下面的变量定义是什么意思 class MyClass myCla
  • 为什么错误回溯显示编辑后的脚本而不是实际运行的脚本?

    背景 考虑以下最小示例 当我保存以下脚本并从终端运行它时 import time time sleep 5 raise Exception 该代码将在休眠五秒后引发错误 并留下以下回溯 回溯 最近一次调用最后一次 文件 test minim
  • 动态 REST API 调用

    我已经成功访问 页面上的静态API数据 我现在正在尝试访问 dynam API 我已经阅读了一些访问动态API的文档 但是API提供商的文档与在线资源不同 我不确定必须在现有代码中进行哪些更改才能访问动态 API 数据 这是来自 API 提
  • 初始化时0.0f的意义是什么(在C语言中)?

    我见过人们初始化浮点变量的代码 如下所示 float num 0 0f 这与仅执行以下操作之间有显着差异吗 float num 0 谢谢 浮动 x 0具有从 int 到 float 的隐式类型转换 浮点数 x 0 0f没有这样的类型转换 浮
  • Swift:从元组数组中获取元素数组

    我有一个像这样的元组数组 var answers number Int good Bool 我想从中获取一个数字成员数组 就像我做了类似的事情 answers number gt Should give Int of all values
  • -fPIC 标志可以增加多少开销?

    Question 我正在测试一个计算曼德尔布罗分形的简单代码 我一直在根据检查点是否属于曼德尔布罗特集的函数中的迭代次数来检查其性能 令人惊讶的是 添加后我的时间出现了很大的差异 fPIC旗帜 据我了解 开销通常可以忽略不计 我遇到的最高开
  • C++ 中最大的整数数据类型?

    C 中最大的整数数据类型是什么 最大的standardC 整数类型是long C has a long long C 0x 也会添加它 当然您可以实现自己的自定义整数类型 甚至可能是 BigInt 类 但从技术上来说 考虑到内置的整数类型
  • 行程解压

    这里是CS学生 我想编写一个程序来解压缩根据游程编码的修改形式进行编码的字符串 我已经为其编写了代码 例如 如果字符串包含 bba10 它将解压缩为 bbaaaaaaaaaa 如何让程序识别字符串的一部分 10 是整数 谢谢阅读 一个简单的
  • 为什么即使在哈希上调用 Enumerable#find/#detect 也会返回数组?

    The 的文档Enumerable find detect http ruby doc org core 2 0 Enumerable html method i find says find ifnone nil obj block ob
  • 使用未分配的变量?

    当声明 paymentstatus 为空或在 if 语句中具有值时 我收到错误使用未分配的变量 ps 我想我已经声明了 ps 但显然我做错了什么 为什么编译器会抱怨这个 这是上下文中的错误 public IList
  • 如何求最大生成树?

    与克鲁斯卡尔最小生成树算法相反的算法是否适用 我的意思是 每一步选择最大权重 边缘 还有其他找到最大生成树的想法吗 是的 它确实 计算网络 G 的最大权生成树的一种方法 由于克鲁斯卡尔 可以总结如下 按权重将 G 的边按降序排序 令 T 为
  • Netbeans 告诉我删除 null 比较,但这会破坏我的代码

    我有以下简单的代码来模拟猫狩猎 import java util Arrays import java util LinkedList public class HuntigSaeson int hunger 4 int level 3 L
  • setInterval 似乎不起作用?

    这段代码似乎不起作用 我正在尝试创建一个可用聊天室的动态列表 每 10 秒更新一次 我还希望用户能够设置参数来过滤要显示的房间 我正在使用这段代码 但由于某种原因它似乎不起作用
  • 无法查看 Service Worker 日志

    看不到我的 Service Worker 的日志 以下是我尝试打开已注册和正在运行的服务工作人员日志的步骤 Open chrome serviceworker internals 单击开始并检查 刷新检查窗口 等待日志出现 但是 两者chr
  • 在 coreos 上启动 calicoctl 容器

    我有 CoreOS 测试版 1153 4 0 我正在尝试运行 calicoctl 来检查我的 calico 网络是否配置正确 所以我尝试使用以下命令运行 calicoctl rkt 容器rkt run quay io calico ctl我
  • Rails ActiveRecord:如何在 jsonb 上使用带双引号的绑定变量

    我有一个 postgres jsonb 查询如下 Blog where upload data gt name name 它可以工作 但会破坏构建 因为优秀的刹车员指出了可能的 SQL 注入风险 如果我使用绑定变量 Blog where u