Unterschied zwischen Umfang und Namespace des Ruby-on-Rails-3-Routings


109

Ich kann nicht verstehen, was der Unterschied zwischen einem Namespace und einem Bereich beim Routing von Ruby-on-Rails 3 ist.

Könnte jemand bitte erklären?

namespace "admin" do
  resources :posts, :comments
end

scope :module => "admin" do
  resources :posts, :comments
end

Antworten:


105

Der Unterschied liegt in den generierten Pfaden.

Die Pfade sind admin_posts_pathund admin_comments_pathfür den Namespace, während sie gerecht posts_pathund comments_pathfür den Bereich sind.

Sie können das gleiche Ergebnis wie ein Namespace erzielen, indem Sie die :name_prefixOption an scope übergeben.


1
Mit Pfaden meinst du die Helfernamen, oder? Ich verstehe die Funktionalität des Oszilloskops nicht. Was macht es (: module => "admin"), wenn sich nichts ändert?
nie_had_a_name

2
Es ändert die tatsächlichen Pfade, die von den Routenpfaden verwendet werden, in "/ admin / Whatever", genau wie der Namespace. Der einzige Unterschied ist das Präfix, das den Hilfsmethoden hinzugefügt wird.
Alternative

32
Um den Unterschied besser zu verstehen, sollten Sie Bereiche für die Lokalisierung über URL und Namespace für die Verschachtelung verwenden, z. B. die URL: domain.com/nl/admin/panel . Das nl ist ein Bereich und admin ist ein Namespace.
Valentin Vasilyev

69

Beispiele helfen mir immer, also hier ein Beispiel:

namespace :blog do
  resources :contexts
end

gibt uns folgende Routen:

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

Scope verwenden ...

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

Wird uns geben:

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

Hier ist eine gute Lektüre zu diesem Thema: http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing


1
Wenn Sie hier also keinen Gültigkeitsbereich verwenden und nur
Folgendes

55

von der Schienenführung

„Der Namespace - Rahmen wird automatisch hinzufügen :assowie :moduleund :pathPräfixe.“

so

namespace "admin" do
  resources :contexts
end

ist das gleiche wie

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

2

Sowohl der Gültigkeitsbereich als auch der Namespace umfassen eine Reihe von Routen zu den angegebenen Standardoptionen.
Außer , dass es keine Standardoptionen für Umfang und für Namespace :path , :as, :module, :shallow_pathund :shallow_prefixalle Optionen standardmäßig auf den Namen des Namespace.

Die verfügbaren Optionen für Bereich und Namespace entsprechen denen der Übereinstimmung .


1

Der Bereich ist etwas komplex, bietet jedoch mehr Optionen, um genau das zu optimieren, was Sie tun möchten.

Der Bereich unterstützt drei Optionen: Modul, Pfad und as . Wenn Sie den Gültigkeitsbereich mit allen it-Optionen sehen, entspricht er genau dem Namespace.

Mit anderen Worten, Routen generiert von

namespace :admin do
  resources :posts
end

ist das gleiche wie

scope module: 'admin', path: 'admin', as: 'admin' do
  resources :posts
end

Mit anderen Worten, wir können sagen, dass es im Vergleich zum Namespace keine Standardoptionen für den Gültigkeitsbereich gibt . Namespace fügt standardmäßig alle diese Optionen hinzu. Mit Scope können wir die Routen nach Bedarf genauer einstellen.

Wenn Sie sich eingehend mit dem Standardverhalten von Bereich und Namespace befassen, werden Sie feststellen, dass der Bereich standardmäßig nur die Option " Pfad " unterstützt, wobei der Namespace drei Optionsmodule unterstützt : " Pfad" und " Standard".

Weitere Informationen finden Sie in einem Dokument- Namespace und -Routing .


Und wenn Sie aus irgendeinem Grund versuchen, die erforderlichen Parameter festzulegen, ist der Umfang die beste Lösung.
Fábio Araújo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.