是否有将用户重定向到特定控制器的解决方案#如果没有路由匹配,是否有action?我有这样一个“最后的规则”:如果没有路由匹配,则Rails路由
match ":rest" => "application#notfound", :constraints => { :rest => /.*/ }
将所有“其他”的东西重定向到应用程序#notfound。问题是插件与自己的路线设置低于 shis规则,永远不会被调用。
是否有将用户重定向到特定控制器的解决方案#如果没有路由匹配,是否有action?我有这样一个“最后的规则”:如果没有路由匹配,则Rails路由
match ":rest" => "application#notfound", :constraints => { :rest => /.*/ }
将所有“其他”的东西重定向到应用程序#notfound。问题是插件与自己的路线设置低于 shis规则,永远不会被调用。
你绝对不是唯一有此问题的人。我知道这很令人沮丧,但给它一些时间 - 我相信Rails团队会把简单而优雅的东西放在一起。我处于类似的位置,只有我需要知道用户输入的URL资源不正确。
快速谷歌搜索,我发现这篇文章演示full solution to the Rails 3.0 rescue_from ActionController::RoutingError problem。该解决方案涉及Route Globbing,并解决了我需要处理不正确的URL和捕获输入的URL。希望这可以帮助!
也许它不是最好的方法,但它会在你的作品没有找到更好的解决办法
钢轨2.3,在应用程序控制器,赶上像
rescue_from(ActionController::RoutingError) { redirect_to "/xpto" #add your code here }
Rails的例外3
在初始化把这样的代码:
module ActionDispatch
class ShowExceptions
def render_exception(env, exception)
if exception.kind_of? ActionController::RoutingError
render(500, 'it was routing error')
else
render(500, "some other error")
end
end
end
末
或更多的东西干净,如:
或:
match '/:anything', :to => "home#routing_error", :constraints => { :anything => /.*/ }
但也许这最后一场比赛不会对您好,因为它将覆盖来自插件/引擎的所有路线。我认为最好的解决方案是使用定制机架中间件来处理特殊情况。
制作一条全路径并将其作为您的routes.rb文件中的最后一条规则。
match "*rest" => "application#notfound"
您还可以在控制器中获取路径作为参数到params[:rest]
的任何参数。
为什么选择投票? – edgerunner 2011-02-02 12:29:38
为什么不简单地编辑public/404.html? – Faisal 2010-11-11 15:04:25