【问题标题】:How to handle ActionController::ParameterMissing gracefully如何优雅地处理 ActionController::ParameterMissing
【发布时间】:2019-11-06 21:06:35
【问题描述】:

我想知道如何优雅地处理错误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

如果我发送的请求传递的不是包含至少一个 prop 的度量键的 json,rails 将自动使用 HTML 回复请求。我想覆盖它。

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

这可能有助于Rails 5 way to handle ActionController::ParameterMissing

rescue_from ActionController::ParameterMissing do |e|
  render 'something'
end

【讨论】:

    【解决方案2】:

    Rails 提供了一种在控制器中挽救异常的简洁方法,将特定的错误类映射到相应的处理程序。

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

    所以,事实上你可以使用 rescuerescue_from 作为 Travis 提到的,例如

    rescue_from ActionController::ParameterMissing, :with =&gt; :render_404

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 2011-11-26
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2014-07-10
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多