我有一个带有以下范围路线的应用程序:
scope "(:locale)", :locale => Regexp.new(I18n.available_locales.join('|')) do
# ...
# lots of routes here
# ...
end
正如您所看到的,'区域设置'这里是可选的。 http://myapp.com/en/foo
和http://myapp.com/foo
都结束于同一个控制器#动作。效果很好。
现在我想摆脱网址中的语言环境,但我希望旧的路由仍然有用,所以简单地删除范围语句就不行了。我想重定向旧的基于区域设置的网址,以重定向到非区域设置网址。像这样:
http://myapp/en/foo
重定向到http://myapp/foo
和
http://myapp/foo
仍然像往常一样工作。
到目前为止,我只有found一个'重定向'各个路线的Rails指南中的选项。但是我想这样做是为了收集一些路线;我的范围内的路线'块。
有关如何使其发挥作用的任何想法?
答案 0 :(得分:0)
我的猜测 - 从很多网址上剥离不同模式的实验 - 这样的事情对你有用:
scope "(:locale)", :locale => Regexp.new(I18n.available_locales.join('|')) do
get '/en/:ccc' => redirect(path: "%{ccc}")
end
路径可能需要在变量之前使用斜杠,您当然可以使用不同的语言代码进行剥离。
这里的重大烦恼是重定向提供两个单独的类,具体取决于哈希或字符串 - OptionRedirect
或PathRedirect
。选项重定向允许您在编写时对变量执行更多操作。