Rails – 空数组的强参数

我发送一个关联ID的数组,说foo_ids到我的控制器。 为了允许一组值,我使用:

 params.permit(foo_ids: []) 

现在,问题是,如果我发送一个空数组foo_ids ,该参数被忽略。 不要将所有的foosfoos为空数组,因为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