我们有以下路线设置:
MyApp::Application.routes.draw do scope "/:locale" do ...other routes root :to => 'home#index' end root :to => 'application#detect_language' end
这给了我们这个:
root /:locale(.:format) home#index root / application#detect_language
这很好.
但是,当我们想要使用语言环境生成路由时,我们遇到了麻烦:
root_path生成/哪个是正确的.
root_path(:locale =>:en)生成/?locale = en这是不合需要的 – 我们想要/ en
所以,问题是,这是可能的,怎么样?
解决方法
默认情况下,root方法用于定义顶级/路由.
所以,你要两次定义相同的路由,导致第二个定义覆盖第一个!
所以,你要两次定义相同的路由,导致第二个定义覆盖第一个!
以下是root方法的定义:
def root(options = {}) options = { :to => options } if options.is_a?(String) match '/',{ :as => :root,:via => :get }.merge(options) end
很明显它使用:root作为命名路由.
如果要使用root方法,只需覆盖所需的参数.
例如.
scope "/:locale" do ...other routes root :to => 'home#index',:as => :root_with_locale end root :to => 'application#detect_language'
并称之为:
root_with_locale_path(:locale => :en)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。