Как обращаться с ActionController :: ParameterMissing изящно - PullRequest
0 голосов
/ 07 ноября 2019

Я хотел бы знать, как правильно обработать ошибку ActionController::ParameterMissing, поэтому вместо возврата некрасивого HTML-кода он возвращает сообщение и что-то отличное от 500 Internal Server Error.

Как узнать, что у меня есть этот контроллер:

class MetricsController < ApplicationController
  before_action :set_metric, only: [:update]

  def update
    if @metric.update(metric_params)
      render json: @metric
    else
      render json: @metric.errors, status: :unprocessable_entity
    end
  end

  private

  def set_metric
    @metric = Metric.find_by(site: params[:site_id], post_id: params[:post_id])
  end

  def metric_params
    params.require(:metric).permit(:param1, :param2)
  end
end

И если я отправлю запрос, отличный от json, содержащий метрический ключ с хотя бы одной пропеллером, rails автоматически ответит на запрос HTML. Я хотел бы перезаписать это.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Rails предоставляет чистый способ восстановления исключений в контроллере, отображая определенные классы ошибок в соответствующие обработчики.

From https://simonecarletti.com/blog/2009/12/inside-ruby-on-rails-rescuable-and-rescue_from/

Итак, фактически выможно использовать rescue или rescue_from, как упомянул Трэвис, например,

rescue_from ActionController::ParameterMissing, :with => :render_404

0 голосов
/ 07 ноября 2019

Это может помочь Rails 5 способ обработки ActionController :: ParameterMissing

rescue_from ActionController::ParameterMissing do |e|
  render 'something'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...