Rails上で render status: :not_found
とかやっているが、この :not_found
と 404
はどこなのか、という小ネタ。
確認した環境
$ bin/rails -v Rails 7.0.6
Railsのステータスコードのシンボル
一覧はRailsガイドにある。
レイアウトとレンダリング-2.2.13.4 :statusオプション - Railsガイド
実装の元ネタはどこにあるかというとrack側にあり、 ::Rack::Utils::HTTP_STATUS_CODESにあり、ここに定義のある文字列を改変してシンボル化している。
簡単に変換したい場合
Rack::Utils.status_code
を使うと変換ができる。
Rack::Utils.status_code(:gateway_timeout) # => 504
ちなみにありえないシンボルを入れるとエラー( Unrecognized status code :hogehoge (ArgumentError)
になるので、使う場合はエラーハンドリングをちゃんと考えること。なお、ステータスコードの数値をシンボルに変換するメソッドはない様子。