2016-11-29 56 views
7

发送看起来像这样的控制器PARAMS时碰到一个问题:导轨5 PARAMS与具有空数组作为对象的值被丢弃

{ 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附近看到了一些文章/问题,但我不确定这是否是问题,因为在他们的示例表中,作业工作是{person: []}变为{person: nil},其中参数没有被完全丢弃。

回答

6

从GH社区@sgrif:

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

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

+0

谢谢,那标题调整也为我做了诡计。我们有任何线索为什么作为:: json解决方案不工作? – Andrew

+0

我没有进一步撬动,抱歉。 – Luke

+0

感谢分享! –

相关问题