简体   繁体   中英

How to handle bad requests / wrong parameters in a rails api?

For example, an api consumer sends:

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

The controller does:

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

This would return a 500 error: "Undefined method permit for array"

Is there a DRY / best practice way to handle this? I think a status 400 should be returned instead.

I think the strong parameters gem should handle this internally, but they don't, so here is my solution

  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

Based on your solution .. you would want to handle all the possibilities verse a specific error response. You can set in a rescue in your render method like this and set unauthorized if there is a method error or just something else going wrong :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM