LoginSignup
10
3

More than 3 years have passed since last update.

Railsでエラーをraiseをした時、statusコードがエラーごとに微妙に違う

Last updated at Posted at 2019-07-03

TL;DR

ActionController シリーズ

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  def test
    raise ActionController::UnknownFormat            # 406
    raise ActionController::UnknownHttpMethod        # 405
    raise ActionController::SessionOverflowError     # 500
    raise ActionController::MissingFile              # 500
    raise ActionController::NotImplemented           # 501
    raise ActionController::MethodNotAllowed         # 405
    raise ActionController::UrlGenerationError       # 500
    raise ActionController::RoutingError             # 500
    raise ActionController::RenderError              # 500
    raise ActionController::BadRequest               # 400
    raise ActionController::ActionControllerError    # 500
  end
end

その他面白そうなエラー

class ApplicationController < ActionController::Base
  def test
    raise ActiveRecord::RecordNotDestroyed           # 500
    raise ActiveRecord::RecordNotSaved               # 422
    raise ActiveRecord::RecordNotUnique              # 500
    raise ActiveRecord::RecordNotFound               # 404
  end
end

エラー一覧の出し方

こちらの記事が書いたように、下記の一行使えば出せます。

ObjectSpace.each_object(Class).select{|k| k.ancestors.include?(ActionController::ActionControllerError) }
=> [ActionController::UnknownFormat,
 ActionController::UnknownHttpMethod,
 ActionController::SessionOverflowError,
 ActionController::MissingFile,
 ActionController::NotImplemented,
....

感想

Railsの組込みエラーでステータスコードを自動で切り分けていることは、さほど不思議ではないが、どこもその文献が見つけられなかったのは自分の不勉強としか言えませんでした。

ちなみに、Controllerのrenderstatusを数字だけでなく、(人間が読めそうな)シンボルも渡せます。
その一覧はこちらの記事(日本語)こちらの記事(英語)で出しています。

参考

https://qiita.com/snaka/items/78008ecd7e65e34c75d7
https://stackoverflow.com/questions/6521544/getting-a-list-of-existing-rails-error-classes-for-re-use-inheritance
https://blog.toshimaru.net/rails-http-status-symbols/
http://billpatrianakos.me/blog/2013/10/13/list-of-rails-status-code-symbols/
https://www.transnet.ne.jp/2018/06/15/1101colnd/

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3