2010-06-12 28 views

Respuesta

95

La diferencia radica en las rutas generadas.

Los caminos son admin_posts_path y admin_comments_path para el espacio de nombres, mientras que son sólo posts_path y comments_path para el ámbito.

Puede obtener el mismo resultado que un espacio de nombres pasando la opción :name_prefix al ámbito.

+1

por rutas u significa los nombres de la ayuda ¿no? no entiendo la funcionalidad del alcance ¿Qué hace (: module => "admin") si no cambia nada? –

+2

Cambia las rutas reales utilizadas por las rutas de ruta a "/ admin/whatever", al igual que el espacio de nombres. Lo único diferente es el prefijo agregado a los métodos de ayuda. – alternative

+28

Para comprender mejor la diferencia: considere usar ámbitos para la localización a través de URL y espacios de nombres para la anidación, por ejemplo, la url: http: //domain.com/nl/admin/panel. El nl es un alcance y el administrador es un espacio de nombres. – Valentin

62

ejemplos siempre me ayudan, por lo que aquí es un ejemplo:

namespace :blog do 
    resources :contexts 
end 

nos dará las siguientes rutas:

blog_contexts GET /blog/contexts(.:format)   {:action=>"index", :controller=>"blog/contexts"} 
        POST /blog/contexts(.:format)   {:action=>"create", :controller=>"blog/contexts"} 
new_blog_context GET /blog/contexts/new(.:format)  {:action=>"new", :controller=>"blog/contexts"} 
edit_blog_context GET /blog/contexts/:id/edit(.:format) {:action=>"edit", :controller=>"blog/contexts"} 
    blog_context GET /blog/contexts/:id(.:format)  {:action=>"show", :controller=>"blog/contexts"} 
        PUT /blog/contexts/:id(.:format)  {:action=>"update", :controller=>"blog/contexts"} 
        DELETE /blog/contexts/:id(.:format)  {:action=>"destroy", :controller=>"blog/contexts"} 

Usando alcance ...

scope :module => 'blog' do 
    resources :contexts 
end 

daré nosotros:

 contexts GET /contexts(.:format)   {:action=>"index", :controller=>"blog/contexts"} 
       POST /contexts(.:format)   {:action=>"create", :controller=>"blog/contexts"} 
    new_context GET /contexts/new(.:format)  {:action=>"new", :controller=>"blog/contexts"} 
edit_context GET /contexts/:id/edit(.:format) {:action=>"edit", :controller=>"blog/contexts"} 
     context GET /contexts/:id(.:format)  {:action=>"show", :controller=>"blog/contexts"} 
       PUT /contexts/:id(.:format)  {:action=>"update", :controller=>"blog/contexts"} 
       DELETE /contexts/:id(.:format)  {:action=>"destroy", :controller=>"blog/contexts"} 

Aquí es una buena lectura sobre el tema: http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing

+1

Entonces, si no usó el alcance aquí y solo tenía: recursos: contextos, el controlador no estaría anidado en el blog: blog/contexts – berto77

49

del rails guide

"El alcance de espacio de nombres añadirá automáticamente :as, así como :module y :path prefijos".

por lo

namespace "admin" do 
    resources :contexts 
end 

es lo mismo que

scope "/admin", as: "admin", module: "admin" do 
    resources :contexts 
end 
2

Tanto alcance y espacio de nombres se determinación del alcance de un conjunto de rutas a las opciones por defecto dados.
Excepto que no hay opciones por defecto para alcance, y por espacio de nombres :path, :as, :module, :shallow_path y :shallow_prefix todas las opciones por defecto para el nombre del espacio de nombres.

Available options tanto para alcance y espacio de nombres corresponden a las de partido.

Cuestiones relacionadas