jsonapi-rb / jsonapi-rails

Rails gem for fast jsonapi-compliant APIs.
http://jsonapi-rb.org
MIT License
319 stars 63 forks source link

Consider having the renderer decide on success/error with status code. #61

Open beauby opened 6 years ago

beauby commented 6 years ago

Instead of having render jsonapi: foo and render jsonapi_errors: errors, simply have render jsonapi: foo and render jsonapi: errors, status: 400.

nuheluxulu commented 5 years ago

Thanks for this comment. Solved it as follows:

controllers/api/v1/api_controller.rb

class ApiController < ApplicationController
  include ExceptionHandler
end

controllers/api/v1/concerns/ExceptionHandler.rb

module ExceptionHandler
  # provides the more graceful `included` method
  extend ActiveSupport::Concern
  included do
    rescue_from Exception do |exception|
      case exception
      when ActiveRecord::RecordNotFound
        render jsonapi_errors: {message: exception.message}, status: :not_found
      when ActiveRecord::RecordInvalid
        render jsonapi_errors: {message: exception.message}, status: :unprocessable_entity
      # else
        # figure out how to render_500
      end
    end
  end
end