如果使用强参数缺少必需的参数,则Rails服务器将使用HTTP 500进行响应。
这不能控制我向用户提供确切问题的反馈。能够向他们发回消息,缺少必需的参数,这没有意义吗?
在ActionController::ParameterMissing
上提供适当的用户反馈的“路线”是什么?是否应该捕获异常并在那里处理您的请求响应?在每个控制器中这样做似乎是错误的。
答案 0 :(得分:1)
您可以使用
rescue_from ActionController::ParameterMissing do |e|
render 'something'
end
在您的ApplicationController
中(或您的父控制器是什么)。
关于您是否应该通知用户,我认为这取决于您的控制器在做什么。如果它们是API控制器,那么一定要优雅地处理它,因为用户负责准备输入。 我认为,如果他们从您的HTML表单中接受数据,那么它就不那么重要了,因为缺少参数可能意味着用户修改了HTML,或者浏览器内部出现了某些错误。
答案 1 :(得分:0)
由于您提到希望将错误详细信息传达回用户,因此您可以执行以下操作:
# 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"=>"param is missing or the value is empty: [field_name]"}
对于仅API的应用程序,我认为这是有价值的信息。
更多信息: