2017-02-20 60 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 (предпочтения: {}), но будьте осторожны, потому что это открывает дверь для произвольного ввода. В этом случае разрешение гарантирует, что значения в возвращаемой структуре разрешены скалярами и отфильтровывают что-либо .

Поскольку ваши PARAMS глубоко вложенными вы можете иметь белый список весь хэш, который вы можете сделать с permit!, но имейте в виду, что это может иметь вызвать проблемы безопасности:

params.permit!(:page_hierarchy) 

Опять же, взятые из Rails Guides:

В белый список всего хэша параметров, разрешение! метод может быть

params.require (: log_entry) .permit! Это отмечает: log_entry параметр hash и любой его суб-хэш его как разрешенный и не проверяет для разрешенных скаляров, что-либо принято. Экстремальный уход должен быть , принятый при использовании разрешения !, поскольку он позволит назначать все текущие и будущие атрибуты модели .