Mue*_*tel 3 ruby ruby-on-rails ruby-on-rails-3 strong-parameters
大家下午好
我对我们计划升级到 Rails 4 的 Rails 3 应用程序进行了强大的参数化。一些控制器使用对象params不仅保存嵌套散列,还保存数组内散列内的数组内的散列等。更改数据结构的性质将是太激烈了,我们希望理想地让它返回相同的数据结构,但是强参数化
下面是一个 JSON 示例:
"my_example" => {
"options" =>
[{"id" => "1"
"name" => "claire"
"keywords" =>
["foo", "bar"]
},
{"id" => "2",
"name" => "marie",
"keywords =>
["baz"]
}],
"wut" => "I know, right?"
}
Run Code Online (Sandbox Code Playgroud)
但为了增加乐趣,该keywords数组可以包含任何字符串。我已经读过,这很棘手并且在其他版本的 Rails 中得到支持,但无论如何。
关于使用 Strong_parameters gem 制作复杂的数据结构有什么一般的经验法则吗?我知道 Rails 4 和 5 能更好地处理这个问题,但我很好奇。
嵌套参数实际上并不是那么具有挑战性。
params.require(:my_example)
.permit(:wutz, options: [:id, :name, keywords: []])
Run Code Online (Sandbox Code Playgroud)
这期望这options是一个资源数组,其中键 :id、:name 和 :keywords 将被列入白名单。
:wutz, :id, :name可以是任何允许的标量类型。keywords: []允许任何标量类型的数组(任何字符串、整数、日期等)。我真的不明白你为什么在这里烦恼。
问题主要在于具有极其动态内容的嵌套哈希。在这种情况下,Rails 的强大参数尚未完全涵盖,您可以使用.permit!并释放 Ruby 哈希切片和切块的完整工具,这些工具非常强大。
gem 几乎向后移植了 Rails 更高版本中的 api ActionController::Parameters,因此我预计升级时不会出现任何重大问题。
https://github.com/rails/strong_parameters#nested-parameters