我正在发送一组关联 ID,例如foo_ids
到我的控制器。为了允许值数组,我使用:
params.permit(foo_ids: [])
现在的问题是,如果我发送一个空数组foo_ids
,该参数被忽略。而不是清除所有foos
正如空数组应该做的那样,关联被保留,因为foo_ids
是不允许的。
这可能是因为Rails 中空数组被转换为 nil https://stackoverflow.com/questions/14647731/rails-converts-empty-arrays-into-nils-in-params-of-the-request,并且该 nil 值将被忽略,因为强参数正在寻找标量值数组,而不是单个标量值。
谁能建议一个好方法来解决这个问题?谢谢!
附加信息
在更新控制器操作中,我需要能够处理两种情况。我需要能够设置foo_ids
到一个空数组。我还需要能够忽略foo_ids
如果我只想更新另一个字段。环境foo_ids
如果 nil 不适用于第二种情况,则为空数组。
这已经很晚了,但我自己也遇到了这个问题。我通过在允许语句中包含标量版本和数组版本来解决这个问题,如下所示:
params.require(:photo).permit(:tags, tags: [])
仅供参考-它has将两者放在同一个许可声明中 - 如果你将它们链接起来,它将因某种原因被丢弃。
编辑:我刚刚注意到通过此方法提交的空数组将变成 nil - 我现在有一堆应该是 nil 的空数组的字段。所以我发布的解决方案实际上并不适合我。
编辑第二个:以为我已经添加了这个,但这个问题与 Rails 在参数哈希上执行 deep_munge 有关。此评论解释了如何修复它:https://stackoverflow.com/a/25428800/130592 https://stackoverflow.com/a/25428800/130592
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)