2010-06-12 10 views

Odpowiedz

95

Różnica polega na generowanych ścieżkach.

Ścieżki są admin_posts_path i admin_comments_path dla przestrzeni nazw, podczas gdy są one po prostu posts_path i comments_path dla zakresu.

Możesz uzyskać taki sam wynik, jak obszar nazw, przekazując do zakresu opcję :name_prefix.

+1

według ścieżek masz na myśli nazwiska pomocnika, prawda? Nie rozumiem funkcjonalności tego zakresu. co to jest (: module => "admin"), jeśli nic się nie zmieni? –

+2

Zmienia rzeczywiste ścieżki używane przez ścieżki trasy na "/ admin/cokolwiek", podobnie jak przestrzeń nazw. Jedynym innym jest prefiks dodany do metod pomocniczych. – alternative

+28

Aby lepiej zrozumieć różnicę: należy rozważyć użycie zakresów do lokalizacji za pomocą adresu URL i przestrzeni nazw w celu zagnieżdżenia, na przykład adresu url: http: //domena.com/nl/admin/panel. Nl jest zasięgiem, a admin jest przestrzenią nazw. – Valentin

62

przykłady zawsze mi pomóc, więc tutaj jest przykład:

namespace :blog do 
    resources :contexts 
end 

dadzą nam następujących trasach:

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

Korzystanie zakres ...

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

da nas:

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

Oto dobry odczyt na temat: „Zakres nazw automatycznie dodać :as jak również :module i :path przedrostki” http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing

+1

Więc jeśli nie używałeś tutaj zakresu i po prostu miałeś: resources: contexts, kontroler nie byłby zagnieżdżony na blogu: blog/konteksty – berto77

49

z rails guide

tak

namespace "admin" do 
    resources :contexts 
end 

jest taka sama jak

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

Zarówno zakres i namespace są scoping zestaw tras do danej opcji domyślnych.
Tyle tylko, że nie istnieją żadne opcje domyślne dla zakresu, a dla nazw :path, :as, :module, :shallow_path i :shallow_prefix opcje Wszystkie domyślne nazwy przestrzeni nazw.

Available options zarówno zakres i nazw odpowiadają tym z meczu.

Powiązane problemy