下午好,所以伙计们
我强烈希望将要升级到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?"
}
但是为了增加乐趣,keywords
数组可以包含任何字符串。我已经read about and which is tricky and supported in other versions of rails,但无论如何。
使用strong_parameters gem建立复杂的数据结构是否有一般的经验法则?我知道Rails 4和5可以更好地处理此问题,但我很好奇。
答案 0 :(得分:4)
嵌套参数并不是真的那么有挑战性。
params.require(:my_example)
.permit(:wutz, options: [:id, :name, keywords: []])
这期望options
是一个资源数组,其中要将密钥:id,:name和:keywords列入白名单。
:wutz, :id, :name
可以是任何允许的标量类型。 keywords: []
允许使用任何标量类型的数组(任何字符串,整数,日期等)。我真的不明白你为什么在这里烦恼。
问题主要是内容非常动态的嵌套哈希。在那种情况下,Rails的强参数还不能完全解决,您可以使用.permit!
并释放相当强大的Ruby哈希切片和切块的全部工具。
gem几乎将back ActionController::Parameters
的api移植到Rails的更高版本中,因此升级时我不希望有任何重大问题。
https://github.com/rails/strong_parameters#nested-parameters