5

我们最近将我们网站上的产品名称从“手镯”更改为“腕带”,并且需要保留旧路线以用于 SEO 目的。

本质上,这些路线

www.hostname.com/products/bracelets/series-1/
www.hostname.com/products/bracelets/series-1/small-purple

应该路由到

www.hostname.com/products/wristbands/series-1/
www.hostname.com/products/wristbands/series-1/small-purple

我在这里阅读教程http://guides.rubyonrails.org/routing.html#redirection并且看起来我将使用块语法,但我仍然不确定如何正确地执行路由。我也希望了解有关路由文件的更多信息,因此任何信息都会很棒。提前致谢

match "/bracelets/:name" => redirect {|params| "/wristbands/#{params[:name]}" }

编辑:

好的,我已经玩了一段时间了,这就是我尝试过的方法

match "/products/bracelets/:name/:name2" => redirect {|params| "/products/wristbands/#{params[:name].pluralize}/#{params[:name2].pluralize}" }

输入网址: localhost:3000/products/bracelets/series-1/small-purple

输出 URL:localhost:3000/products/wristbands
错误消息:无效产品:series-1
(所以匹配有效,但重定向无效)

如果我更改匹配以检查这样的参数:

match "/products/balance-bracelets/:name/:name2" => redirect {|params| "/products/wristbands/#{params.inspect}" }

我得到以下信息:

 /products/wristbands/{:name=>"series-1", :name2=>"small-purple"}

所以它似乎没有识别第二个斜杠'/'或其他东西。有任何想法吗?

4

2 回答 2

10

我处于同样的情况,这对我有用:

match "/products/bracelets/:name/:name2" => redirect {|params, request| "/products/wristbands/#{params[:name].pluralize}/#{params[:name2].pluralize}" }

我已经将两个 agruments 传递到块中。

于 2012-10-16T05:30:20.627 回答
4

你可以在 Rails 5 中做到这一点。

match '/products/bracelets/:name/:name2', to: "/products/wristbands/%{name}/%{name2}"
于 2017-04-28T00:10:55.240 回答