简体   繁体   English

在 Rails 中使用强参数允许嵌套数组

[英]Permitting nested arrays using strong params in Rails

How can I permit nested arrays using strong parameters?如何使用强参数允许嵌套数组?

ActionController::Parameters.new(filter: ['a', [1,2]]).permit(filter: [])
Unpermitted parameter: :filter

Expected output:预期输出:

<ActionController::Parameters {"filter"=>["a", [1,2]]} permitted: true>

I believe the only way to work with nested parameters is to permit them as an array of hashes or use only scalar values inside the array.我相信处理嵌套参数的唯一方法是允许它们作为散列数组或仅在数组内使用标量值。

According to the documentation :根据文档

To declare that the value in params must be an array of permitted scalar values map the key to an empty array:要声明 params 中的值必须是允许的标量值数组,请将键映射到空数组:

params.permit(:id => [])

You can also use permit on nested parameters, like:您还可以对嵌套参数使用 permit,例如:

params.permit(:name, {:emails => []}, :friends => [ :name, { :family => [ :name ], :hobbies => [] }])

Your case with flattened values:您具有扁平值的情况:

> ActionController::Parameters.new(filter: ['a', 1,2]).permit(filter: [])
=> <ActionController::Parameters {"filter"=>["a", 1, 2]} permitted: true>

With an array of hashes:使用哈希数组:

> ActionController::Parameters.new(filter: [{param1: 'a', param2: [1,2]}]).permit(filter: [:param1, param2: []])
=> <ActionController::Parameters {"filter"=>[<ActionController::Parameters {"param1"=>"a", "param2"=>[1, 2]} permitted: true>]} permitted: true>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM