Nei*_*ton 6 routing ruby-on-rails
我们有以下路线设置:
MyApp::Application.routes.draw do
scope "/:locale" do
...other routes
root :to => 'home#index'
end
root :to => 'application#detect_language'
end
Run Code Online (Sandbox Code Playgroud)
这给了我们这个:
root /:locale(.:format) home#index
root / application#detect_language
Run Code Online (Sandbox Code Playgroud)
这很好.
但是,当我们想要使用语言环境生成路由时,我们遇到了麻烦:
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
Run Code Online (Sandbox Code Playgroud)
很明显它使用:root作为命名路由.如果要使用root方法,只需覆盖所需的参数.例如
scope "/:locale" do
...other routes
root :to => 'home#index', :as => :root_with_locale
end
root :to => 'application#detect_language'
Run Code Online (Sandbox Code Playgroud)
并称之为:
root_with_locale_path(:locale => :en)
Run Code Online (Sandbox Code Playgroud)
所以,这不是一个错误!
| 归档时间: |
|
| 查看次数: |
4740 次 |
| 最近记录: |