如何处理rails api中的错误请求/错误参数?

时间:2018-05-30 16:13:24

标签: ruby-on-rails api rails-api

例如,api消费者发送:

"ticket": [{ "param": "value"}]

控制器执行:

params.require(:ticket).permit(:name)

这将返回500错误:“数组的未定义方法许可”

有没有DRY /最佳实践方法来处理这个问题?我认为应该返回状态400

2 个答案:

答案 0 :(得分:0)

我认为强大的参数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

答案 1 :(得分:0)

根据您的解决方案......您可能希望处理特定错误响应的所有可能性。您可以像这样在渲染方法中设置救援,如果存在方法错误或其他错误,则设置未授权:

begin
  render json: json, status: 200 
rescue_from NoMethodError do |exception|
  render :unauthorized
end
rescue => e
  render :unauthorized
end