2010-11-11 141 views
1

是否有将用户重定向到特定控制器的解决方案#如果没有路由匹配,是否有action?我有这样一个“最后的规则”:如果没有路由匹配,则Rails路由

match ":rest" => "application#notfound", :constraints => { :rest => /.*/ } 

将所有“其他”的东西重定向到应用程序#notfound。问题是插件与自己的路线设置低于 shis规则,永远不会被调用。

+0

为什么不简单地编辑public/404.html? – Faisal 2010-11-11 15:04:25

回答

3

你绝对不是唯一有此问题的人。我知道这很令人沮丧,但给它一些时间 - 我相信Rails团队会把简单而优雅的东西放在一起。我处于类似的位置,只有我需要知道用户输入的URL资源不正确。

快速谷歌搜索,我发现这篇文章演示full solution to the Rails 3.0 rescue_from ActionController::RoutingError problem。该解决方案涉及Route Globbing,并解决了我需要处理不正确的URL和捕获输入的URL。希望这可以帮助!

1

把这个规则放在最后..从上到下路由匹配,所以如果它找到了匹配,那么它就停在那里。

+0

我把它作为最后的规则。问题是*插件会在应用程序规则后面添加,所以我必须找到另外一种方法:( – Fu86 2010-11-11 13:51:17

+1

我看到问题出在哪里,插件应该提供一种方法让你调用它们的路由,例如devise提供了devise_for路由方法。 – zzawaideh 2010-11-11 14:17:09

1

也许它不是最好的方法,但它会在你的作品没有找到更好的解决办法

钢轨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 => /.*/ } 

但也许这最后一场比赛不会对您好,因为它将覆盖来自插件/引擎的所有路线。我认为最好的解决方案是使用定制机架中间件来处理特殊情况。

7

制作一条全路径并将其作为您的routes.rb文件中的最后一条规则。

match "*rest" => "application#notfound" 

您还可以在控制器中获取路径作为参数到params[:rest]的任何参数。

+0

为什么选择投票? – edgerunner 2011-02-02 12:29:38

相关问题