ruby-on-rails - Rails 6,转换嵌套强参数的最佳实践
问题描述
在 Rails 6 上,我向 ProductsController 发送 JSON 请求,我以这种方式定义了我的强参数策略:
def product_params
params.require(:offer).permit(:title, products: [:uuid, :item_name])
end
如果我在控制器中打印方法:
puts product_params
我可以看到:
<ActionController::Parameters {
"title" => "some title",
"products"=>[
<ActionController::Parameters {"uuid"=>"9u35ui3oj562", "item_name"=>"Blue Bike"}
permitted: true>,
<ActionController::Parameters {"uuid"=>"98f9541ef310","item_name"=>"Pink
Skates"} permitted: true>
]} permitted: true>
因此正确采用了 JSON。现在我“拿出”我的产品:
tmp = product_params['products']
我尝试将它们转换为常规哈希:
new_array_of_hashes = tmp.map(&:to_h)
但我得到了错误:
ActionController::UnfilteredParameters (unable to convert unpermitted parameters to hash)
为什么?显然products数组中的所有对象都有“permitted: true”标志。
new_array_of_hashes = tmp.map(&:to_unsafe_hash)
产生相同的错误信息。
奇怪的是,如果我在控制器的强参数方法中进行转换:
def product_params
params.require(:offer).permit(:title, products: [:uuid, :item_name]).to_h
end
它完美地工作。有什么不同?
解决方案
推荐阅读
- google-bigquery - 将 Xilnex 的实时数据连接到 Google Big Query
- python - Python numpy 从 (n,) 重塑为 (n, 1 , 1)
- python - Frappe 中的开发者模式
- botframework - 如何在 LUIS 中为相同的预构建实体(编号)定义两个不同的实体角色
- c# - 如何将 C# 中的图像数组转换为一维向量?
- postgresql - 在 Sequalize 中对通过表中的字段进行排序和吸收
- android - 如何在锁定屏幕上使用 exoplayer 控件创建通知
- spring-boot - 如何javac一些spring boot项目的文件
- angular - 如何为角度反应形式的自定义验证器编写单元测试用例
- vba - 如何跳过有错误的迭代?