Railsでエラー時Jsonレスポンスを返す

目的

RailsAPIとして使ってるが、何も設定しないと404や500時にHTMLが返ってくる。

そこをJson形式で返ってくる様にしたい。

404

【Rails】RoutingError時の処理を書く - Qiita

を参考に、下記の様な感じで書いて、application_controller.rb で例外を処理する。

match '*unmatched_route', :to => 'application#raise_not_found!', :via => :all

500

application_controller.rb に以下を追加

  # 他のrescue_from よりも下に書くこと
  rescue_from StandardError, with: :handle_500

  def handle_500(err)
    # StandardErrorをcatchしてしまうと、SentryのCatchができなくなるで、ここに追記
    Raven.capture_exception(err)
    render json: { error: err.message }, status: :internal_server_error
  end

てな感じでやると、HTMLじゃなくて、Jsonが返ってくる