Rails,强大的参数和复杂的数据结构

时间:2018-11-16 20:20:50

标签: ruby-on-rails ruby 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?"
}

但是为了增加乐趣,keywords数组可以包含任何字符串。我已经read about and which is tricky and supported in other versions of rails,但无论如何。

使用strong_parameters gem建立复杂的数据结构是否有一般的经验法则?我知道Rails 4和5可以更好地处理此问题,但我很好奇。

1 个答案:

答案 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