Rails 5 params,对象具有空数组,因为值被删除

Luk*_*uke 8 arrays ruby-on-rails strong-parameters ruby-on-rails-5

我发送一个看起来像这样的控制器参数时遇到问题:

{ id: "1", stuff: {"A" => [], "B" => [], "C" => [], "D" => []} }
Run Code Online (Sandbox Code Playgroud)

该方法只能看到{ id: "1" }stuff删除整个参数.

如果数组中有任何值,则可以更改此值.但是说除了键之外,所有数组中都有值,"C"除了"C"像之外它们都会在那里:

{ id: "1", stuff: {"A" => ["1"], "B" => ["2", "3"], "D" => ["4"]} }
Run Code Online (Sandbox Code Playgroud)

我正在从Rails 4.2.x升级到这个问题 - > 5.0.0任何关于这里发生了什么的建议?我已经看到了一些文章/问题围绕改写(munging)参数,但我不知道如果是这样的问题,因为在如何改写(munging)作品的示例表{person: []}变成{person: nil},那里的人参数是不能完全丢弃.

Luk*_*uke 7

来自GH社区的@sgrif:

这是预期的行为.无法使用HTML表单对空数组进行编码(例如,Content-Type:url-form-encoded).你在Rails 4.2中传递测试的原因是因为控制器测试没有对它们的参数进行编码,它们只是直接传递了哈希值.在Rails 5中,它对它们进行编码.如果您的控制器关心空数组,那么您可能正在处理JSON请求.您可以使用as :: json在测试中执行此操作.如果您只处理表单输入,则永远不会收到空数组.

添加as: :json并没有最终为我工作,但@request.headers["Content-Type"] = 'application/json'在测试开始时添加了.