【发布时间】:2018-05-30 16:13:23
【问题描述】:
例如,一个 api 消费者发送:
"ticket": [{ "param": "value"}]
控制器会:
params.require(:ticket).permit(:name)
这将返回 500 错误:“未定义的方法允许数组”
是否有处理此问题的 DRY / 最佳实践方法?我认为应该返回状态400。
【问题讨论】:
标签: ruby-on-rails api rails-api
例如,一个 api 消费者发送:
"ticket": [{ "param": "value"}]
控制器会:
params.require(:ticket).permit(:name)
这将返回 500 错误:“未定义的方法允许数组”
是否有处理此问题的 DRY / 最佳实践方法?我认为应该返回状态400。
【问题讨论】:
标签: ruby-on-rails api rails-api
我认为强参数 gem 应该在内部处理这个问题,但他们没有,所以这是我的解决方案
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
【讨论】:
根据您的解决方案..您可能希望处理特定错误响应的所有可能性。您可以像这样在您的渲染方法中设置救援,并在出现方法错误或其他问题时设置未经授权:
begin
render json: json, status: 200
rescue_from NoMethodError do |exception|
render :unauthorized
end
rescue => e
render :unauthorized
end
【讨论】: