rails 3.0 routing - 重定向globbed路由

时间:2012-11-09 21:19:58

标签: ruby-on-rails routes

在我的路线文件中,我们最初设置了此路径:

  match '/search/*tag' => 'search#search'

我们现在要从网址中删除“搜索”一词。所以我添加了一条新路线:

match '/*tag' => 'search#search'

一切都很美妙。我们想要更新旧路由以重定向到新路由以保持seo和书签正常工作。

 match '/search/*tag' => redirect {|params| "/#{params[:tag]}"}

然而,这是多元化这个词。

Input url: www.fubar.com/search/work
Becomes:   www.fubar.com/works

造成这种情况的原因是什么以及如何阻止它复制标签?

可能相关:我们需要使用/ *标签而不是/:标签,因为我们有时会有一个标签列表。即www.fubar.com/work/web/video

2 个答案:

答案 0 :(得分:1)

清除缓存后,一切正常。浏览器会记住301重定向(我忘记了这一点,并且显然是在保留以前的重定向服务。

match '/search/*tag' => redirect { |params| "/#{params[:tag]}" }
match '/*tag' => 'search#search'

答案 1 :(得分:0)

我所能推荐的是在块内填充Rails.logger.debug {params.inspect}以重定向。这至少可以让你开始调试它。当您离开快乐路径时,Rails路由可能会变得棘手和脆弱,并且知道问题是否在识别中(即*标签的匹配是多元化的)还是在路由中(重定向的结果是多元化的)将是第一个看的地方。