різниця між областю та простором імен маршрутизації на рубіні на рейки 3


110

Я не можу зрозуміти, в чому різниця між простором імен і сферою в маршрутизації рубіну на рейках 3.

Може хтось, будь ласка, пояснить?

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

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

Відповіді:


105

Різниця полягає у створених шляхах.

Шляхи є admin_posts_pathі admin_comments_pathдля простору імен, в той час як вони просто posts_pathі comments_pathдля області застосування.

Ви можете отримати той самий результат, що і простір імен, передавши :name_prefixпараметр у область застосування.


1
під шляхами u означають імена помічників, правда? я не розумію функціональність області. що він робить (: module => "admin"), якщо нічого не зміниться?
never_had_a_name

2
Він змінює фактичні шляхи, які використовуються шляхами маршруту, на "/ admin / what", як і простір імен. Єдине, що відрізняється - префікс, що додається до допоміжних методів.
альтернатива

32
Щоб краще зрозуміти різницю, розгляньте можливість використання областей для локалізації за допомогою URL-адреси та простору імен для введення, наприклад, URL-адреса: domain.com/nl/admin/panel . Nl - це область, а admin - це область імен.
Валентин Васильєв

70

приклади мені завжди допомагають, тому ось приклад:

namespace :blog do
  resources :contexts
end

надасть нам наступні маршрути:

    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 :module => 'blog' do
  resources :contexts
end

Дасть нам:

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

Ось хороше читання з цього питання: http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing


1
Отже, якщо ви тут не використовували область, а просто мали: ресурси: контексти, контролер не
вкладеться

55

від напрямних напрямних

"Область простору імен автоматично додасть :as, а також :moduleі :pathпрефікси."

так

namespace "admin" do
  resources :contexts
end

те саме, що

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

2

І область, і область імен визначають набір маршрутів до заданих параметрів за замовчуванням.
За винятком того, що немає ніяких варіантів по замовчуванням для сфери , так і для простору імен :path , :as, :module, :shallow_pathі :shallow_prefixпараметри по замовчуванням все з ім'ям простору імен.

Доступні варіанти як для області дії, так і для простору імен відповідають тим, які відповідають .


1

сфера застосування є трохи складною, але надає більше варіантів для точного налаштування того, що ви хочете зробити.

область підтримує три варіанти: модуль, шлях і як . Якщо ви бачите область з усіма параметрами, він буде точно таким же, як і простір імен.

Іншими словами, маршрути, згенеровані користувачем

namespace :admin do
  resources :posts
end

те саме, що

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

Іншими словами, ми можемо сказати, що не існує параметрів за замовчуванням для області застосування порівняно з простором імен. простору імен додайте всі ці параметри за замовчуванням. Таким чином, використовуючи область застосування, ми можемо більш точно налаштувати маршрути за потребою.

Якщо ви глибоко поглянете на поведінку за замовчуванням області та простору імен , ви знайдете, що область застосування за замовчуванням підтримує лише : параметр path , де як простір імен підтримує три варіанти модуля, шлях та як за замовчуванням.

Для отримання додаткової інформації зверніться до простору імен док- файлів і маршрутизації .


І якщо ви з будь-якої причини намагаєтесь поставити потрібні параметри, область є найкращим рішенням.
Fábio Araújo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.