Hatena::Grouprubyist

うんたらかんたらRuby RSSフィード

2010-03-02存在しないpathを指定した際に404を出力させる方法

存在しないpathを指定した際に404を出力させる方法

| 存在しないpathを指定した際に404を出力させる方法 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - 存在しないpathを指定した際に404を出力させる方法 - うんたらかんたらRuby

routing errorやだな、どうやってやるんだろうかと悩んでいたところ

下記を見つけました。

ありがとうございます。


参考

Railsでカスタムな404エラーのページを出力する方法 - YomuKaku Memo


やってみた

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


application_controller

rescue_fromと組み合わせて、404用テンプレートをlayout無しで表示。

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

こんな感じ

f:id:rochefort:20100302233340p:image


f:id:rochefort:20100302233608p:image


2010/03/06追記

*pathについて記載されてた

Railscasts - Catch-all Route


2010/03/07追記

rescue_action_in_publicを使用したエラーハンドリング - うんたらかんたらRuby - Rubyistより

こっちでやると、こんな感じ。

config/environments/*rb

config.action_controller.consider_all_requests_local にて制御。

trueだとlocal用、falseだとpublic用。

  protected
  def local_request?
    false
  end

  def rescue_action_in_public(exception)
    case exception
    when ActiveRecord::RecordNotFound, 
      ActionController::RoutingError,
      ActionController::UnknownAction
      render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
      #render :template => '/shared/error_404', :layout => false, :status => 404
    else
      super
    end
  end