2010-06-12 9 views

Répondre

95

La différence réside dans les chemins générés.

Les chemins sont admin_posts_path et admin_comments_path pour l'espace de noms, alors qu'ils ne sont que posts_path et comments_path pour la portée.

Vous pouvez obtenir le même résultat qu'un espace de noms en passant l'option :name_prefix à la portée.

+1

par chemins vous voulez dire les noms des assistants non? Je ne comprends pas la fonctionnalité de l'oscilloscope. qu'est-ce que ça fait (: module => "admin") faire si rien ne change? –

+2

Il modifie les chemins réels utilisés par les chemins d'accès à "/ admin/whatever", tout comme l'espace de noms. Le seul différent est le préfixe ajouté aux méthodes d'assistance. – alternative

+28

Pour mieux comprendre la différence: envisagez d'utiliser des étendues pour la localisation via l'URL et l'espace de noms pour l'imbrication, par exemple l'URL: http: //domain.com/nl/admin/panel. Le nl est une portée, et admin est un espace de noms. – Valentin

62

exemples me aident toujours, alors voici un exemple:

namespace :blog do 
    resources :contexts 
end 

nous donnera les itinéraires suivants:

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"} 

champ avec ...

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

donnera us:

 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"} 

Voici une bonne lecture sur le sujet: http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing

+1

Donc, si vous n'utilisiez pas la portée ici et que vous aviez juste: ressources: contextes, le contrôleur ne serait pas imbriqué sur le blog: blog/contexts – berto77

49

de la rails guide

« Le champ d'espace de noms ajoutera automatiquement :as ainsi que :module et :path préfixes. »

si

namespace "admin" do 
    resources :contexts 
end 

est le même que

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

Les deux champ et espace de noms sont un ensemble de détermination de la portée des itinéraires aux options par défaut donné.
Sauf qu'il n'y a pas d'options par défaut pour champ, et pour espace de noms :path, :as, :module, :shallow_path et :shallow_prefix les options par défaut tous au nom de l'espace de noms.

Available options pour les possibilités et espace de noms correspondent à ceux de match de.