Разница между областью и пространством имен маршрутизации ruby-on-rails 3 - PullRequest
105 голосов
/ 13 июня 2010

Я не могу понять, в чем разница между пространством имен и областью в маршрутизации ruby-on-rails 3.

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

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

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

Ответы [ 5 ]

99 голосов
/ 13 июня 2010

Разница заключается в сгенерированных путях.

Пути - admin_posts_path и admin_comments_path для пространства имен, в то время как они просто posts_path и comments_path для области.1008 * Вы можете получить тот же результат, что и пространство имен, передав опцию :name_prefix в область действия.

63 голосов
/ 28 июня 2011

примеров всегда помогают мне, поэтому вот пример:

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

51 голосов
/ 26 апреля 2013

из руководства по направляющим

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

so

namespace "admin" do
  resources :contexts
end

совпадает с

scope "/admin", as: "admin", module: "admin" do
  resources :contexts
end
2 голосов
/ 18 декабря 2015

Обе область действия и пространство имен определяют диапазон маршрутов с указанными параметрами по умолчанию.
За исключением того, что для область действия нет параметров по умолчаниюа для пространства имен :path, :as, :module, :shallow_path и :shallow_prefix все параметры по умолчанию имеют имя пространства имен.

Доступные опции для обоих scope и namespace соответствуют тем из match .

0 голосов
/ 20 августа 2018

scope немного сложен, но предоставляет больше возможностей для точной настройки того, что вы хотите сделать.

scope поддерживает три варианта : module, path и as . Если вы видите область со всеми ее параметрами, она будет точно такой же, как и пространство имен.

Другими словами, маршруты, сгенерированные

namespace :admin do
  resources :posts
end

совпадает с

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

Другими словами, мы можем сказать, что для scope нет параметров по умолчанию по сравнению с пространством имен. namespace добавить все эти опции по умолчанию. Таким образом, используя область действия, мы можем более точно настроить маршруты по мере необходимости.

Если вы глубоко изучите scope и namespace поведение по умолчанию, вы обнаружите, что scope по умолчанию поддерживает только : путь option, где namespace поддерживает три опции module, path и как по умолчанию.

Для получения дополнительной информации, пожалуйста, обратитесь к документу Пространство имен и маршрутизация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...