2012-08-09 9 views
5

Tenemos la configuración siguientes rutas:Tratar con varias rutas de raíz y los ámbitos en los carriles

MyApp::Application.routes.draw do 
    scope "/:locale" do  
    ...other routes 
    root :to => 'home#index' 
    end 
    root :to => 'application#detect_language' 
end 

Lo que nos da esto:

root  /:locale(.:format) home#index 
root /     application#detect_language 

lo cual está bien.

Sin embargo, cuando queremos generar una ruta con la configuración regional que golpear problemas:

root_path genera / que es correcto.

root_path(:locale => :en) genera /?locale=en que no es deseable - queremos /en

Por lo tanto, la pregunta es, ¿es esto posible y cómo?

+2

No sé si la pregunta es posible, pero puede usar algo como ': as =>: raíz_inicial' para diferenciarlos como una solución alternativa. –

Respuesta

7

método de raíz se utiliza de forma predeterminada para definir el nivel superior/ruta. ¡Así que está definiendo la misma ruta dos veces, haciendo que la segunda definición anule la primera!

Aquí es la definición del método de raíz:

def root(options = {}) 
    options = { :to => options } if options.is_a?(String) 
    match '/', { :as => :root, :via => :get }.merge(options) 
end 

Está claro que se utiliza: raíz que la ruta denominada. Si desea utilizar el método raíz simplemente anule los parámetros necesarios. P. ej.

scope "/:locale" do  
    ...other routes 
    root :to => 'home#index', :as => :root_with_locale 
end 
root :to => 'application#detect_language' 

y llamar a esto como:

root_with_locale_path(:locale => :en) 

Por lo tanto, esto no es un error!

Cuestiones relacionadas