Rails 5处理ActionController :: ParameterMissing的方法

4
如果使用强参数时缺少必需的参数,Rails 服务器将以 HTTP 500 响应。

这并没有让我完全掌握向用户反馈到底出了什么问题。是否可以像“缺失所需参数”一样发送一个消息给他们呢?

ActionController::ParameterMissing上给出适当的用户反馈的“Rails方式”是什么?您是否应该捕获异常并在那里处理请求响应?在每个控制器中进行这样做似乎是不正确的。

2个回答

7

您可以使用

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

在你的ApplicationController(或者你的父控制器)中。

至于是否应该通知用户,我认为这取决于你的控制器正在做什么。如果它们是API控制器,则处理这些情况很有意义,因为用户负责准备输入。 如果它们从你的HTML表单接受数据,那么,在我看来,这并不重要,因为缺少参数可能意味着用户调整了HTML,或者浏览器内部出现了严重问题。


4

鉴于您提到希望向用户传达出错的具体信息,可以采取以下做法:

# app/controllers/application_controller.rb

rescue_from ActionController::ParameterMissing do |exception|
  render json: { error: exception.message }, status: :bad_request
end

你还可以定义一个方法来处理特定的异常,如果你更喜欢分离处理逻辑:
# app/controllers/application_controller.rb

rescue_from ActionController::ParameterMissing, with: :handle_parameter_missing

def handle_parameter_missing(exception)
  render json: { error: exception.message }, status: :bad_request
end

以上两个示例都将返回如下的 JSON 响应:{"error"=>"参数缺失或值为空:[field_name]"}

对于仅限 API 的应用程序,我认为传递此有价值的信息。

更多信息:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接