разница между областью видимости и пространством имен маршрутизации ruby-on-rails 3
Я не могу понять, в чем разница между пространством имен и областью видимости в маршрутизации ruby-on-rails 3.
кто-нибудь может объяснить?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
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