2017-02-20 64 views
2

我收到此PARAMS:许可证多维PARAMS

<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: }"元件的阵列。 A children以及由几个"{id: , children: }"元素组成的数组。

我该如何允许这种格式的参数?

解决像这样的,我没有工作,因为数组是多维的Permit array in params

回答

1

您可以通过允许哈希不是数组要做到这一点,像这样:

params.permit(page_hierarchy: {}) 

Rails Guides更详细地解释:

有时是不可能的或方便申报有效密钥 的散列参数或其内部结构。只需映射到一个空的 哈希值:

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

由于您的PARAMS深深嵌套,你可以加入白名单整个哈希,您可以用permit!做,但要注意,这可能会带来安全问题:

params.permit!(:page_hierarchy) 

再次,从取Rails Guides

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

params.require(:log_entry).permit!这标志着:log_entry 参数散列及其任何子散列被允许,并且不检查 允许的标量,任何东西都被接受。在使用许可证时,应特别注意 ,因为它将允许所有当前和将来的 型号属性进行批量分配。