コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsでsymbol表記のhttp status codeを数値に変換するときにはRack::Utils.status_codeを使うと変換できる

Rails上で render status: :not_found とかやっているが、この :not_found404 はどこなのか、という小ネタ。

確認した環境

$ 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) になるので、使う場合はエラーハンドリングをちゃんと考えること。なお、ステータスコードの数値をシンボルに変換するメソッドはない様子。

参考リンク