WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

Railsでステータスコード404エラーページをカスタマイズす る

      2015/06/13

標題の通り。
動的な出力が必要なエラーページなどで、ヘルパーメソッドをテンプレート内で利用したい場合に。

routes.rb編集

下記URLを参考に。
http://memo.yomukaku.net/entries/8-Rails%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%81%AA404%E3%82%A8%E3%83%A9-%E3%81%AE%E3%83%9A-%E3%82%B8%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

config/routes.rbの末尾にmap.connect ‘*path’, ~ の1行を追記する。

ActionController::Routing::Routes.draw do |map|

// ~省略~

map.connect '*path', :controller => 'application', :action => 'error_404'
end

‘*path’については以下が詳しい。
http://railscasts.com/episodes/46-catch-all-route

map.connect ‘*path’, ~で、これより上に設定されたいずれのルートにもマッチしないものをすべて補足し、applicationコントローラのerror_404メソッドに飛ばす。

application_controllerの編集

app/controllers/application_controller.rbに以下を追記する。

rescue_from ActionController::UnknownAction, :with => :error_404
rescue_from ActiveRecord::RecordNotFound, :with => :error_404
def error_404
render :template => '/errors/404', :layout => false, :status => 404
end

エラーテンプレートの編集

error_404アクションでレンダーとして指定したテンプレート(この例では、app/views/errors /404.html.erb)を適宜、編集する。
この例の場合は、ヘルパーメソッドもテンプレート内で利用することができる。

 - Ruby on Rails ,