Ruby on Rails のカスタムエラーページについて
新入社員の平田です。最近腰を痛めてしまいました。皆様も腰は大切にしてください。
さて、たまにサイトを巡っていると、存在しないページ(ステータスコード:404)、サーバー内部のエラーページ(ステータスコード:500)などがデフォルトのページではなく、そのサイトのデザインに合ったページになっていることが良くあります。今回は、エラーページを自分好みにカスタマイズする際にハマったことをメモしておきます。
基本的なやり方
Ruby on Rails 4系のエラーページの作り方は下記
が参考になります。 routes.rbに書く'anything' のところは 'unmatched_route'でも可です。
ハマったところ
上記のやり方で/hoge/fuga/なんて存在しないページにアクセスしようとすると確かにカスタマイズされたエラーページがでます。しかし、/hoge/fuga.cssなどにアクセスしようとするとTemplate Missingというエラーが出ます。これは、フォーマットを指定したことで、/errors/not_found.cssというファイルにアクセスしようとして失敗していることが原因です。
解決方法
renderの際にフォーマットを指定してやれば解決します。
def rescue404(e) @exception = e render 'errors/not_found', status: 404 end
上のページを、
def rescue404(e) @exception = e render 'errors/not_found.html.erb', status: 404 end
このように拡張子込で指定してあげれば解決できます。
(著: 平田 真人)