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



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



кто-нибудь может объяснить?



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

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

5 ответов:

разница заключается в созданном пути.

пути admin_posts_path и admin_comments_path для пространства имен, в то время как они просто posts_path и comments_path для области.

вы можете получить тот же результат, что и пространство имен, передав объем.

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

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

С направляющие

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

так

namespace "admin" do
  resources :contexts
end

это то же самое, что

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

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

доступные варианты как scope и пространство имен соответствуют матч.

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

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

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

namespace :admin do
  resources :posts
end

такой же, как

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

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

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

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

Comments

    Ничего не найдено.