我们有以下路线设置:
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)
所以,这不是一个错误!
关于ruby-on-rails - 在 Rails 中处理多个根路径和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11882494/