Rails 将请求参数中的空数组转换为 nils

2024-01-06

我的应用程序中有一个 Backbone 模型,它不是典型的平面对象,它是一个大型嵌套对象,我们将嵌套部分存储在 MySQL 数据库的 TEXT 列中。

我想在 Rails API 中处理 JSON 编码/解码,以便从外部看起来您可以 POST/GET 这个大型嵌套 JSON 对象,即使它的一部分存储为字符串化 JSON 文本。

然而,我遇到了一个问题,Rails 神奇地将空数组转换为nil价值观。例如,如果我发布此内容:

{
  name: "foo",
  surname: "bar",
  nested_json: {
    complicated: []
  }
}

我的 Rails 控制器看到了这个:

{
  :name => "foo",
  :surname => "bar",
  :nested_json => {
    :complicated => nil
  }
}

所以我的 JSON 数据已被更改..

以前有人遇到过这个问题吗?为什么 Rails 会修改我的 POST 数据?

UPDATE

他们是这样做的:

https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/request.rb#L288 https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/request.rb#L288

这就是他们这样做的原因:

https://github.com/rails/rails/pull/8862 https://github.com/rails/rails/pull/8862

所以现在的问题是,在我的嵌套 JSON API 情况下如何最好地处理这个问题?


经过大量搜索,我发现从 Rails 4.1 开始,您可以完全跳过 deep_munge “功能”

config.action_dispatch.perform_deep_munge = false

我找不到任何文档,但你可以在这里查看这个选项的介绍:https://github.com/rails/rails/commit/e8572cf2f94872d81e7145da31d55c6e1b074247 https://github.com/rails/rails/commit/e8572cf2f94872d81e7145da31d55c6e1b074247

这样做可能存在安全风险,记录如下:https://groups.google.com/forum/#!topic/rubyonrails-security/t1WFuuQyavI https://groups.google.com/forum/#!topic/rubyonrails-security/t1WFuuQyavI

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

Rails 将请求参数中的空数组转换为 nils 的相关文章

  • AWS SES模板html部分是多行

    我正在使用 AWS SES 按照文档发送电子邮件https docs aws amazon com ses latest DeveloperGuide send personalized email api html https docs
  • Twitter Bootstrap 中下拉链接的模态

    我正在尝试从下拉菜单中的链接进行模式启动 该模式似乎已启动 网站变为灰色 但看不到 来自不在下拉列表中的常规链接的模态工作得很好 我对 jquery 进行了愚弄 但由于我是 jquery 的新手 所以没有任何结果 这是我的网站代码
  • HABTM 关系和accepts_nested_attributes_for

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

    在 Rails 中处理分片数据库的最佳方法是什么 分片应该在应用层 活动记录层 数据库驱动层 代理层还是其他层处理 各自的优点和缺点是什么 FiveRuns 有一个名为的 gem数据结构 https github com bpot data
  • 在 Rails 中禁用连接池以使用 PgBouncer

    我们有一个 Ruby on Rails 4 2 8 项目 可以访问大型 PostgreSQL 数据库 我们将使用 PgBouncer 添加一个新的连接池服务器 由于 PgBouncer 将处理数据库连接池 我们是否需要关闭 Rails 自动
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • Rails Capistrano 3 - 如何将 production.log 文件共享到 Capistrano 的共享文件夹中?

    我正在使用 Capistrano 3 与我的 Rails 应用程序一起部署 问题是 每次我将应用程序部署到服务器时 log development log 文件都会重置 我听说可以将 production log 文件放入共享文件夹中并在每
  • PHP 数组通过 JSON 转为 jquery 数组

    我有点困惑为什么以下不起作用 get php
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • 有时您可能需要重新启动 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
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 使用 C# 反序列化 JSON 以返回项目

    我有以下内容 documents keyPhrases search results Azure Search fast search indexing sophisticated search capabilities Build gre
  • 创建一个默认为零的工厂关联?

    在factories rb 文件中使用FactoryGirl gem 如何创建一个关联默认为nil 的工厂 我正在思考以下几点 Factory define user do factory factory association post
  • 在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
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 升级到 Rails 6 时是否有一种编程方法可以检测 Zeitwerk::NameError?

    我目前正在将旧的 Rails 应用程序迁移到 Rails 6 好像项目中有些文件和里面定义的类不一致 运行应用程序测试时我没有看到此错误 但部署后我收到如下错误 Zeitwerk NameError expected file app my

随机推荐

  • 在类路径上发现多次出现 org.json.JSONObject:[重复]

    这个问题在这里已经有答案了 我有一个基本的 Spring Boot 2 1 5 RELEASE 应用程序 使用 Spring Initializr JPA 嵌入式 Tomcat Thymeleaf 模板引擎 并打包为可执行 JAR 当我启动
  • 如何以编程方式在反应本机中截取屏幕截图

    如何在 React Native 中截取屏幕截图 我需要截图并将其放入Image成分 我该怎么办 有一个库可以做到这一点 反应本机视图镜头 https github com gre react native view shot import
  • 如何在 Angular 4 材料排序中对日期/时间列进行排序?

    我正在使用角度材料表并使用 matSort 进行排序 但它没有对日期 时间列进行排序 它将日期时间列值作为字符串 如何对 Angular 4 材料中的日期 时间列进行排序 我的 json 看起来像这样 name Rule Test 5 ti
  • 如何调试配置 django 以使用 apache 和 mod-wsgi 提供服务的基本问题?

    人们在设置 django 以由 apache 和 mod wsgi 提供服务时遇到困难是很常见的 常见的症状是 导入错误 由于某种原因 通常在每种情况下略有不同 settings py 或类似的文件无法导入 有关众多示例 请参阅本页右栏中的
  • C 编程语言,第 1 章练习 1.10(Getchar 和 Putchar)

    我已经为此工作了 2 个小时 但我被困住了 我在网上找到了答案 但这并不能帮助我学习我显然缺少的概念 Prompt 编写一个程序将其输入复制到输出 将每个选项卡替换为 t 每个退格键 b 以及每个反斜杠 这使得制表符和退格键以明确的方式可见
  • Python 中断言的使用示例?

    我已经读过有关何时使用断言与异常的信息 但我仍然没有 明白 似乎每当我认为我处于应该使用断言的情况时 在后来的开发中我发现我 三思而后行 以确保当我调用函数时断言不会失败 由于还有另一个 Python 习惯用法 即更喜欢使用 try exc
  • 在运行时创建TabView?

    我需要使用 java 代码在运行时创建选项卡视图 笔记 不使用xml设计 在 XML 中创建 TabHost TabWidget 然后在运行时添加 TAbHost TabSpec
  • 如何创建 C 头文件 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望能够在头文件中创建一组函数 我可以将其 include 到我的一个 C 程序中 打开您最喜欢的文本编辑器 创建一个名为whate
  • 带有 Spring 缓存和咖啡因的 Spring 云网关

    我有一个 Spring Cloud 网关 它将 API 剩余请求转发到一些微服务 我想缓存特定请求的响应 为此我写了这个过滤器 Component Slf4j public class CacheResponseGatewayFilterF
  • 在 chrome 扩展中正确使用 execcommand("paste")

    我正在尝试使用以下命令将剪贴板数据粘贴到文本区域中execcommand paste 带有 chrome 扩展 但我似乎无法让它工作 权限已设置 我尝试过设置focus 在文本区域上 但是document execCommand paste
  • numpy 数组之间的“in”运算符的含义是什么?

    我注意到in可以在 numpy 数组之间使用 然而 它的含义可能有点违反直觉 import numpy as np np array 0 in np array 1 2 False np array 0 in np array 0 1 Tr
  • 如何使用 iDangerous Swiper 和 jquery .click();同时

    我坚持以下几点 我正在使用 iDangerous Swiper 插件 效果很好 但是 我还想在同一个 iDangerous swiper 上使用 jQuery 的单击功能 例如 div div class swiper slide lots
  • 如何使用 LINQ 查找并删除集合中的重复对象?

    我有一个代表对象的简单类 它有 5 个属性 一个日期 两个小数 一个整数和一个字符串 我有一个集合类 源自CollectionBase 这是一个容器类 用于保存我的第一个类中的多个对象 我的问题是 我想删除重复的对象 例如具有相同日期 相同
  • 如何对 IBM Cloud 数据库进行按需备份

    我在 IBM Cloud 中有一个 Elasticsearch 部署 我想从中定期进行按需备份 有没有办法使用命令行启动备份 IBM Cloud 数据库每天定期备份其所有数据库 但您无法选择备份计划 如果您想更频繁地创建备份或继续创建备份
  • 我应该对 Asp.NET Web-api 路由使用 RouteParameter 还是 UrlParameter?

    我见过两者都被使用 所以我想知道 它们做相同的事情还是不同的事情 如果是后者 有什么区别呢 我尝试通过查看 Visual Studio MVC 4 rc Web api 模板来自己回答这个问题 但遗憾的是它同时使用了两者 所以我的困惑仍然存
  • React context - 'contextType' 未定义

    我在用 电子邮件受保护 cdn cgi l email protection and 电子邮件受保护 cdn cgi l email protection应该支持反应Context并尝试运行一个与以下相同的简单示例反应上下文 https r
  • 如何更改 Vob 所有者和 Vob 组?

    我尝试更改 vob 所有者和 vob 组 它会抛出如下错误 Error No ClearCase group found Error unknown protection styles 您可以查看技术说明 关于在 Windows 上更改 V
  • JSTL 标签如何在 JSF 2.1 中评估以下内容

    我有下面的 Test xhtml 我可以在其中选择 海 空 模式 我不想将所有 4 个页面 Page1 xhtml Page2 xhtml Page3 xhtml Page4 xhtml 加载到 jsf 视图树中 在我的场景中 模式一旦选择
  • Java UTC 毫秒

    试图在java中获取世界时间似乎是如此困难 C 中类似这样的东西 DateTime Now ToUniversalTime 似乎是那么困难的事情 我有代码从较早的日期 也是 utc 中减去当前的 utc 时间来查找时间差 但我似乎不知道如何
  • Rails 将请求参数中的空数组转换为 nils

    我的应用程序中有一个 Backbone 模型 它不是典型的平面对象 它是一个大型嵌套对象 我们将嵌套部分存储在 MySQL 数据库的 TEXT 列中 我想在 Rails API 中处理 JSON 编码 解码 以便从外部看起来您可以 POST