允许多维参数

时间:2017-02-20 14:09:00

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我收到了这个参数:

<ActionController::Parameters 
  {"page_hierarchy"=>
      [<ActionController::Parameters 
          {"id"=>"6", "children"=>[
                         {"id"=>"1", "children"=>[{"id"=>"2"}, 
                         {"id"=>"5"}, 
                         {"id"=>"3"}, 
                         {"id"=>"18"}, 
                         {"id"=>"4"}]}]} permitted: false>]} permitted: false>

页面"page_hierarchy"是一个由多个"{id: , children: }"元素组成的数组。 children也是一个由多个"{id: , children: }"元素组成的数组。

如何以此格式允许参数?

像这样的解决方案对我来说不起作用,因为数组是多维的Permit array in params

1 个答案:

答案 0 :(得分:1)

您可以通过允许哈希而不是数组来实现此目的,如下所示:

permit!

Rails Guides进一步详细说明:

  

有时声明有效密钥是不可能或不方便的   哈希参数或其内部结构。只是映射到空   散列:

     

params.permit(preferences:{})但要小心,因为这会打开   任意输入的大门。在这种情况下,许可证确保了价值   返回的结构是允许的标量和过滤掉任何东西   其他

由于你的params是深层嵌套的,你可能必须将整个哈希列入白名单,你可以使用params.permit!(:page_hierarchy) ,但要注意这可能会带来安全问题:

{{1}}

再次,取自Rails Guides

  

将整个参数哈希列入白名单,许可证!方法可以   使用:

     

params.require(:log_entry).permit!这标志着:log_entry   参数哈希及其允许的任何子哈希值,不检查   对于允许的标量,任何事都被接受。应该非常小心   使用许可证时采取,因为它将允许所有当前和未来   模型属性被分配。