Неверно понимаю назначение param.require?

В контроллере нужно убедиться что параметры присутствуют. Если нет, то в API обработчик ActionController::ParameterMissing, как я понимаю, должен самостоятельно вернуть ответ об отсутствующих параметрах.

Тестирую так:
ActionController::Parameters.new(foo1: 'bar1', foo2: 'bar2').require([:foo1, :foo2])

ActionController::ParameterMissing: param is missing or the value is empty: [:foo1, :foo2]

Что нелогично, поскольку параметры то переданы. Что я делаю не так?

Ищу лаконичную альтернативу простым проверкам в контроллере типа таких:
(render json: {status: "Error", message: "Missing parameter 'foo1'"}; return) unless param.has_key?(:foo1)
(render json: {status: "Error", message: "Missing parameter 'foo2'"}; return) unless param.has_key?(:foo2)
  • Вопрос задан
  • 220 просмотров
Решения вопроса 2
mbeloshitsky
@mbeloshitsky
Вебдев, систем оперейшонс, ж.д. автоматика
require не поддерживает массивы или несколько аргументов. Вызывайте по одиночке .

params = ActionController::Parameters.new(foo1: 'bar1', foo2: 'bar2')
params.require(:foo1)
params.require(:foo2)


Или воспользуйтесь map.
Ответ написан
2ord
@2ord Автор вопроса
С подсказкой от Михаил Белошицкий пришёл к такой валидации аргументов:
params = ActionController::Parameters.new(foo1: 'bar1', invalid_foo: 'bar2') # только для демонстрации работы в консоли, в контроллере не строчка не нужна.
[:foo1, :foo2].each {|q| params.require(q)}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы