在我的Rails应用程序我已经定义了路由,以便用户可以访问诸如http://mydomain.com/qwe2显示404,而不是500的Rails
记录,但是,如果他们输错了“qwe2”他们获得了500页。我认为404会更合适。
如何更改显示的错误页面?谢谢
在我的Rails应用程序我已经定义了路由,以便用户可以访问诸如http://mydomain.com/qwe2显示404,而不是500的Rails
记录,但是,如果他们输错了“qwe2”他们获得了500页。我认为404会更合适。
如何更改显示的错误页面?谢谢
您得到500代码的唯一原因是如果您的应用程序引发异常。这可能是由于缺少路由,您没有任何定义的路由匹配,或者因为您的控制器或视图崩溃了。
在生产环境中,您可能希望捕获应用程序生成的所有错误,并在需要时提供更好的错误屏幕(如果适用)或“未找到”页面。
例如,蛮力捕获所有异常的捕手可能被定义为:
class ApplicationController < ActionController::Base
if (Rails.env.production?)
rescue_from Object, :with => :uncaught_exception_rescue
end
protected
def uncaught_exception_rescue(exception)
render(:partial => 'errors/not_found', :status => :not_found)
end
end
返回404型错误是容易的,如果你能告诉当你想做到这一点:
render(:partial => 'errors/not_found', :status => :not_found)
确保你有某种默认路由,否则你将一直得到这些错误。通常这是通过在您的routes.rb的最后添加一条catch-all路由完成的:
map.default '/*path', :controller => 'default', :action => 'show'
然后,您可以对此请求执行任何操作。
在config/routes.rb
底部创建一个包罗万象的路线:
map.connect '*path', :controller => 'unknown_route'
然后在app/controllers/unknown_route_controller
你可以这样做:
class UnknownRouteController < ApplicationController
def index
render :file => "#{Rails.root}/public/404.html", :layout => false,
:status => 404
end
end
,这会使得你的404页的任何未知的路线。
谢谢,非常有用! – Victor 2010-04-06 00:13:53