我的应用中有一个 Backbone 模型,它不是典型的平面对象,它是一个大型嵌套对象,我们将嵌套部分存储在 MySQL 数据库的 TEXT 列中。
我想在 Rails API 中处理 JSON 编码/解码,以便从外部看起来您可以 POST/GET 这个大型嵌套 JSON 对象,即使它的一部分存储为字符串化 JSON 文本。
但是,我遇到了 Rails 神奇地将空数组转换为 nil
值的问题。例如,如果我发布这个:
{
name: "foo",
surname: "bar",
nested_json: {
complicated: []
}
}
我的 Rails Controller 看到了这个:
{
:name => "foo",
:surname => "bar",
:nested_json => {
:complicated => nil
}
}
所以我的 JSON 数据已被更改..
以前有人遇到过这个问题吗?为什么 Rails 会修改我的 POST 数据?
更新
这是他们做的地方:
https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/request.rb#L288
这就是~为什么他们这样做:
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://groups.google.com/forum/#!topic/rubyonrails-security/t1WFuuQyavI
关于ruby-on-rails - Rails 在请求的参数中将空数组转换为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14647731/