最近做一个项目,完成上线了(www.gkvision.com), 但是做完的时候,发现自己还没有为运用指定一个404错误,输入错误地址竟然是 route错误,这瞬间让自己网站变得很烂,于是赶紧为这个工程增加错误404界面

情况一

我在项目一个控制器中增加error的方法,并将做好的404页面放在views中,好现在我们在route中增加一个当所有条件都无法匹配时条件,如下

match "*a" => "home#error"

这样在这条上面所有条件都没有匹配时,就会执行这句,跳转到我的404界面中

情况二

这样就处理了,路由出错的情况,但是还有种情况,比如我们显示某个相册的东西,一般的路径都是

/show?album_id=3器

在后台中处理有时候会找不到id (假如你使用的是find的方法),这时候会抛出一个ActiveRecord::RecordNotFound错误,(如果你使用的是find_by_id 或是之类的语法,只会返回一个为空的数组),那我们可以在application_controller.rb加入这个异常处理办法如下

rescue_from ActiveRecord::RecordNotFound, :with => :show_error

如果你还想捕获其他异常也可写在这


rescue_from ActionView::MissingTemplate,:with => :show_error
rescue_from ActionView::Template::Error,:with => :show_error
rescue_from ActionController::RoutingError, :with => :show_error
rescue_from ActionController::UnknownController, :with => :show_error

情况三

但是如果你在程序中使用find_by_id之类的方法,他一般只有运用这个实例才会发现错误,那么我们可以这样做

begin @album =  @theme.albums.first
  rescue
    redirect_to error_path
  end

这样,当使用这个实例发生任何报错时,我们都把他重定向到404