Rails、强参数和复杂的数据结构

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 能更好地处理这个问题,但我很好奇。

max*_*max 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