【问题标题】:Strong parameters permit Array of Arrays强参数允许 Array of Arrays
【发布时间】:2013-11-04 23:11:53
【问题描述】:

我想要发布的数据看起来像 { foo: [[:bar, 1], [:baz, 0]] }

我如何允许使用strong parameters?我能得到的最接近的是

params.permit(foo: [[]]) 返回{"foo"=>[]}

【问题讨论】:

  • 我现在找不到参考资料,但我记得 foo: [][] 会起作用吗?
  • params.permit(foo: [][]) *** ArgumentError 异常:参数数量错误(0 代表 1..2)
  • 你不想要 params.permit(foo:[[][]]) 吗?或者你可能想尝试 params.permit(food:[bar:[],baz:[]]) 如果嵌套。
  • 第一个失败并出现我在上面发布的相同错误,第二个返回与我在原始问题中发布的相同。

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


【解决方案1】:

男主,

在我看来,强参数无法处理数组数组。 我确实阅读了code of it in github,它处理符号、字符串和哈希

对于这种情况,您必须使用自己的代码来处理。

【讨论】:

    【解决方案2】:

    基本上:

    def permitted_params
      result = params.require(:model).permit(:attributes).to_h # No array of arrays or hashes
      result[:model][:array_of_arrays] = params[:model][:array_of_arrays]
      result
    end
    

    再进一步,假设你有一个Model#json,并且你想存储model.json[:array_of_arrays] = [[]]

    def permitted_params
      result = params.require(:model).permit(:attributes).to_h # No array of arrays or hashes
      result[:json] ||= {}
      result[:json].merge!(array_of_arrays: params[:model][:json][:array_of_arrays])
      result
    end
    

    在调用 to_h 之前,请确保您已允许所有不受信任的参数,并在之后注意合并的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多