Рельсы, строгие параметры и сложные структуры данных - PullRequest
0 голосов
/ 16 ноября 2018

Добрый день, ТАК, ребята

Я хорошо настраиваю приложение Rails 3, которое мы планируем обновить до Rails 4. Некоторые контроллеры используют объект params для хранения не только вложенных хешей, но и хешейвнутри массивов внутри хешей внутри массивов и т. д. Изменение природы структуры данных было бы слишком интенсивным, в идеале мы хотим, чтобы оно возвращало ту же структуру данных, но строго параметризованную

Вот пример JSON:

"my_example" => {
  "options" =>
   [{"id" => "1"
     "name" => "claire"
     "keywords" => 
       ["foo", "bar"]
     },
    {"id" => "2",
      "name" => "marie",
      "keywords => 
        ["baz"]
    }],
    "wut" => "I know, right?"
}

Но для дополнительного удовольствия массив keywords может содержать любую строку.О котором я читал, и который хитрый и поддерживается в других версиях rails , но неважно.

Существуют ли общие правила создания сложных структур данных с гемом strong_parameters?Я знаю, что Rails 4 и 5 справляются с этим лучше, но мне любопытно.

1 Ответ

0 голосов
/ 17 ноября 2018

Вложенные параметры не так уж сложны.

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

Предполагается, что options - это массив ресурсов, в котором ключи: id,: name и: ключевые слова должны быть в белом списке.

:wutz, :id, :name может быть любым разрешенным скалярным типом. keywords: [] разрешает массив любого скалярного типа (любая строка, целое число, дата и т. Д.). Я действительно не понимаю, почему ты беспокоишься здесь.

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

Драгоценный камень в значительной степени поддерживает API ActionController::Parameters в более поздних версиях Rails, так что я не ожидаю каких-либо серьезных проблем при обновлении.

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

...