Как обрабатывать плохие запросы / неправильные параметры в API рельсов? - PullRequest
0 голосов
/ 30 мая 2018

Например, потребитель API отправляет:

"ticket": [{ "param": "value"}]

Контроллер выполняет:

params.require(:ticket).permit(:name)

Это вернет 500 ошибка: «Неопределенное разрешение метода для массива»

Существует ли СУХОЙ / лучший способ справиться с этим?Я думаю, что статус 400 должен быть возвращен.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Основываясь на вашем решении .. вы хотели бы обрабатывать все возможности стиха конкретного ответа об ошибке.Вы можете установить спасение в вашем методе рендеринга следующим образом и установить неавторизованный, если есть ошибка метода или просто что-то пошло не так:

begin
  render json: json, status: 200 
rescue_from NoMethodError do |exception|
  render :unauthorized
end
rescue => e
  render :unauthorized
end
0 голосов
/ 30 мая 2018

Я думаю, что гем сильных параметров должен обрабатывать это внутренне, но они этого не делают, поэтому вот мое решение

  rescue_from NoMethodError do |exception|
    if exception.message =~ /undefined method `permit' for/
      render_error(message: 'Invalid parameter format.', type: :invalid_parameters, status: :bad_request)
    else
      raise
    end
  end
...