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のrender
でstatus
を数字だけでなく、(人間が読めそうな)シンボルも渡せます。
その一覧はこちらの記事(日本語)やこちらの記事(英語)で出しています。
参考
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/