【问题标题】:Rails, strong parameters, and complex data structuresRails、强参数和复杂的数据结构
【发布时间】:2018-11-16 20:20:50
【问题描述】:

晚安,伙计们

我强烈参数化我们计划升级到 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 处理得更好,但我很好奇。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 strong-parameters


    【解决方案1】:

    嵌套参数并不是那么具有挑战性。

    params.require(:my_example)
          .permit(:wutz, options: [:id, :name, keywords: []])
    

    这需要 options 是一个资源数组,其中键 :id、:name 和 :keywords 将被列入白名单。

    :wutz, :id, :name 可以是任何允许的标量类型。 keywords: [] 允许任何标量类型(任何字符串、整数、日期等)的数组。我真的不明白你为什么在这里烦恼。

    问题主要在于具有极其动态内容的嵌套哈希。在没有完全覆盖 Rails 强参数的情况下,您可以使用 .permit! 并释放非常强大的 Ruby 哈希切片和切块的完整工具。

    gem 非常接近地向后移植了更高版本的 Rails 中的 ActionController::Parameters 的 api,因此我认为升级时不会出现任何重大问题。

    https://github.com/rails/strong_parameters#nested-parameters

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多