Rails – 空数组的强参数
我发送一个关联ID的数组,说foo_ids
到我的控制器。 为了允许一组值,我使用:
params.permit(foo_ids: [])
现在,问题是,如果我发送一个空数组foo_ids
,该参数被忽略。 不要将所有的foos
都foos
为空数组,因为foo_ids
是不允许的,所以这个关联是独立的。
这可能是因为一个空数组在轨中被转换为nil ,并且nil值被忽略,因为强参数正在寻找一个标量值数组,而不是单个标量值。
任何人都可以提出一个很好的解决方法吗? 谢谢!
附加信息
在更新控制器操作中,我需要能够处理两种情况。 我需要能够将foo_ids
设置为一个空数组。 我也需要能够忽略foo_ids
如果我只是想更新另一个领域。 如果nil不适用于第二种情况, foo_ids
设置为空数组。
这已经很晚了,但是我自己也有这个问题。 我通过在permit语句中包含标量版本和数组版本来解决它,如下所示:
params.require(:photo).permit(:tags, tags: [])
仅供参考 – 它必须在相同的许可证声明中 – 如果您链接它们会由于某种原因而被抛出。
编辑:我只是注意到,通过这个方法提交一个空的数组将被转换为零 – 我现在有一堆字段,应该是空的数组是零。 所以我发布的解决scheme实际上并不适合我。
编辑第二个:以为我已经添加了这个,但是这个问题是相关的Rails执行params散列deep_munge。 这个评论解释了如何解决它: https : //stackoverflow.com/a/25428800/130592
我想到的临时解决scheme是:
params[:foo_ids] ||= [] if params.has_key?(:foo_ids) params.permit(foo_ids: [])
在这里, foo_ids
只有在传递foo_ids
被设置为一个空数组。 如果在请求中没有传递,则忽略它。
我仍然希望find一个更好的解决scheme,因为这样的事情在我正在进行的项目中会很常见 – 如果您有任何问题,请提出更好的build议。
我最近遇到了同样的问题,但是这里没有一个答案适用于我。 这是我的解决scheme。 如果你有JavaScript处理HTTP请求,这也可能适用于你。
在你的客户端:
if (photo.tags.length === 0){ photo.tags = ["null"] }
在你的PhotosController上
def photo_params p = params.require(:photo).permit(tags: []) p["tags"].reject! { |tag| tag == "null" } p end