Rails重定向范围路由

时间:2016-04-12 11:08:15

标签: ruby-on-rails redirect scope routing

我有一个带有以下范围路线的应用程序:

scope "(:locale)", :locale => Regexp.new(I18n.available_locales.join('|')) do
  # ...
  # lots of routes here
  # ...
end

正如您所看到的,'区域设置'这里是可选的。 http://myapp.com/en/foohttp://myapp.com/foo都结束于同一个控制器#动作。效果很好。

现在我想摆脱网址中的语言环境,但我希望旧的路由仍然有用,所以简单地删除范围语句就不行了。我想重定向旧的基于区域设置的网址,以重定向到非区域设置网址。像这样:

http://myapp/en/foo重定向到http://myapp/foo

http://myapp/foo仍然像往常一样工作。

到目前为止,我只有found一个'重定向'各个路线的Rails指南中的选项。但是我想这样做是为了收集一些路线;我的范围内的路线'块。

有关如何使其发挥作用的任何想法?

1 个答案:

答案 0 :(得分:0)

我的猜测 - 从很多网址上剥离不同模式的实验 - 这样的事情对你有用:

scope "(:locale)", :locale => Regexp.new(I18n.available_locales.join('|')) do
    get '/en/:ccc' => redirect(path: "%{ccc}")
end

路径可能需要在变量之前使用斜杠,您当然可以使用不同的语言代码进行剥离。

这里的重大烦恼是重定向提供两个单独的类,具体取决于哈希或字符串 - OptionRedirectPathRedirect。选项重定向允许您在编写时对变量执行更多操作。