Объявите обязательный параметр массива с помощью Rails Strong Params - PullRequest
2 голосов
/ 25 февраля 2020

В моем контроллере Rails я бы хотел требовать один параметр, emails. Это должен быть массив.

Это разрешено.

emails[]=foo@bar.com&emails[]=up@down.com

Это недопустимо.

emails=foo@bar.com

params.require(:emails) разрешит оба варианта. Первый приходит как массив. Последний как строка. Это проблема.

params.permit(emails: []) не требует параметра emails.

params.require(:emails).permit([]) не работает, потому что params.require(:emails) становится умным и возвращает массив, а не ActionController: : Параметры.

Как разрешить emails[]=... и запретить emails=...?

1 Ответ

0 голосов
/ 25 февраля 2020

Как и сказал Тадман, скрининг - это то, чем в основном занимаются сильные параметры.

Вы можете взглянуть на Grape, возможно, он покажет вам некоторые направления для ваших проблем

  desc "API demo", {}
  params do
    requires :id, type: Integer, desc: 'ID'
    requires :name, type: Boolean, desc: 'xxx'
  end

Сообщение об ошибке будет получить, если вы передадите ему неожиданный тип параметров

...