【问题标题】:Rails 5 params with object having empty arrays as values are droppedRails 5 参数,对象具有空数组作为值被删除
【发布时间】:2017-04-13 17:51:46
【问题描述】:

我在发送如下所示的控制器参数时遇到问题:

{ id: "1", stuff: {"A" => [], "B" => [], "C" => [], "D" => []} }

该方法只看到{ id: "1" },整个stuff 参数被丢弃。

如果数组中有任何值,则可以更改此值。但是假设所有数组中除了键"C" 之外都有值,它们都会在"C" 之外存在,例如:

{ id: "1", stuff: {"A" => ["1"], "B" => ["2", "3"], "D" => ["4"]} }

我从 Rails 4.2.x -> 5.0.0 升级时遇到了这个问题 关于这里发生的事情有什么建议吗?我已经看过一些关于munging parameters 的文章/问题,但我不确定这是否是问题所在,因为在他们的示例表中,关于 munging 的工作原理是 {person: []} 变为 {person: nil},其中 person 参数不会被丢弃完全。

【问题讨论】:

    标签: ruby-on-rails arrays ruby-on-rails-5 strong-parameters


    【解决方案1】:

    来自 GH 社区的@sgrif:

    这是预期的行为。没有办法编码一个空 使用 HTML 表单的数组(例如 Content-Type: url-form-encoded)。这 您的测试在 Rails 4.2 中通过的原因是控制器测试通过了 不编码他们的参数,他们只是通过散列传递 直接地。在 Rails 5 中,它对它们进行编码。如果您的控制器关心 空数组,您可能正在处理 JSON 请求。你 可以在你的测试中使用 as: :json 来做到这一点。如果你只是处理 表单输入,你永远不会收到一个空数组。

    添加as: :json 对我没有用,但在测试开始时添加@request.headers["Content-Type"] = 'application/json' 可以。

    【讨论】:

    • 谢谢,标题调整也对我有用。我们是否有任何线索为什么: :json 解决方案不起作用?
    • 抱歉,我没有进一步调查。
    • 感谢分享!
    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2013-12-08
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多