开发者

Custom Error Page - Ruby on Rails

开发者 https://www.devze.com 2023-02-01 05:46 出处:网络
I am trying to setup a custom error page in my website. I am following the guidelines atPerfectLine Blog.

I am trying to setup a custom error page in my website. I am following the guidelines atPerfectLine Blog.

It works in the case where the controller exists, but the id does not exist. For example, I have a blog controller and id 4 does not exist. It shows the custom error page

But it does not exist in the case, where controller itself does not exist. For example, if I type some random controller with a numeric id does not gets caught by the methods I have setup in the application controller to re-route the custom error pages. In this case, I get an

ActionController::RoutingError (No route matches "/randomcontrollername"):

in the terminal and the default error page that comes with rails.

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery开发者_StackOverflow中文版

  unless Rails.application.config.consider_all_requests_local
    rescue_from Exception,                            :with => :render_error
    rescue_from ActiveRecord::RecordNotFound,         :with => :render_not_found
    rescue_from ActionController::RoutingError,       :with => :render_not_found
    rescue_from ActionController::UnknownController,  :with => :render_not_found
    rescue_from ActionController::UnknownAction,      :with => :render_not_found
  end

  private
  def render_not_found(exception)
     render :template => "/error/404.html.erb", :status => 404
  end

  def render_error(exception)
    render :template => "/error/500.html.erb", :status => 500 
  end

end

Could you please help me. Thanks.


You can do that with route globbing in rails, It lets you match any action to any part of a route using wildcards.

To catch all remaining routes, just define a low priority route mapping as the last route in config/routes.rb:

In Rails 3: match "*path" => 'error#handle404'

In Rails 2: map.connect "*path", :controller => 'error', :action => 'handle404'

params[:path] will contain the matching part.


If you don't need dynamic error pages, just edit public/404.html and public/505.html. If you do, see Reza.mp's answer.

0

精彩评论

暂无评论...
验证码 换一张
取 消