我正在向我的控制器发送一组关联ID,比如foo_ids.要允许值数组,我使用:

params.permit(foo_ids: [])

现在的问题是,如果我发送一个foo_ids的空数组,参数就会被忽略.与其像一个空数组那样清除所有foos,不如让关联单独存在,因为不允许使用foo_ids.

这可能是因为an empty array is converted to nil in rails,而nil值被忽略,因为强参数正在寻找一个标量值数组,而不是单个标量值.

有人能提出解决这个问题的好办法吗?谢谢

Additional info

在更新控制器操作中,我需要能够处理两种情况.我需要能够将foo_ids设置为空array.如果我只想更新另一个字段,就可以忽略它.如果nil不适用于第二种情况,则将foo_ids设置为空array.

推荐答案

我得出的临时解决方案是:

params[:foo_ids] ||= [] if params.has_key?(:foo_ids)
params.permit(foo_ids: [])

在这里,只有当通过时,foo_ids才被设置为空array.如果未在请求中传递,则会忽略它.

我仍然希望找到一个更好的解决方案,因为这类事情在我正在进行的项目中非常常见——如果你有更好的 idea ,请一定提出建议.

Ruby-on-rails相关问答推荐

查询Where Date.parse Rails

如何判断字符串中是否包含列值

如何在测试期间为 Rails 应用程序启用 Rails.cache 会话对象

如何在 Ruby on Rails 中正确存储 BigDecimal

ViewModel 和 Controller 有什么区别?

Rails:关于yields

Rails 3.1 assets资源 - 奇怪的开发服务

如何在 IRB/Rails 控制台中 suppress 返回值的输出?

Rails - 设计 - 登录时出现错误消息?

在 Epoch 中将 Ruby 时间戳转换为秒数并返回

如何使用 Ruby 在现有 PDF 上编辑或书写?

如何将变量 link_to 定义为外部 URL

使用 AJAX 向 Rails 发送 Authenticity Token 的正确方法

如何为rails中的number_field添加默认值?

Rails:进行不可逆转的迁移是不是很糟糕?

在 ruby​​ on rails 中创建自定义 html 助手

Rails 控制台中手动更新属性值的验证问题

快速添加链接[:notice]

我怎样才能看到水豚在失败的黄瓜步骤中发现了什么?

在 Rails 中显示主机名和数据库名