Ruby on rails rails 3.0路由-重定向全局路由

Ruby on rails rails 3.0路由-重定向全局路由,ruby-on-rails,routes,Ruby On Rails,Routes,在我的路由文件中,我们最初设置了此路由: match '/search/*tag' => 'search#search' 我们现在想从url中删除“搜索”一词。因此,我添加了一条新路线: match '/*tag' => 'search#search' 这一切都很好。我们想更新旧的路线,重定向到新的路线,以保持搜索引擎优化和书签工作 match '/search/*tag' => redirect {|params| "/#{params[:tag]}"} 然而,这

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

  match '/search/*tag' => 'search#search'
我们现在想从url中删除“搜索”一词。因此,我添加了一条新路线:

match '/*tag' => 'search#search'
这一切都很好。我们想更新旧的路线,重定向到新的路线,以保持搜索引擎优化和书签工作

 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

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

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

一旦我清除缓存,一切都正常了。浏览器会记住301个重定向(我忘记了这一点,并且显然一直在为以前中断的重定向服务)

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

一旦我清除了缓存,一切都正常了。浏览器会记住301个重定向(我忘记了这一点,很明显我一直在为前一个中断的重定向服务)

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

在块中运行Rails.logger.debug{params.inspect}我得到{:tag=>“work”}作为URL www.fubar.com/search/workRunning Rails.logger.debug{params.inspect}的输出,在块中我得到{:tag=>“work”}作为URL www.fubar.com/search/work的输出