Я не могу понять, какая разница между пространством имен и областью в маршрутизации ruby-on-rails 3.
Может кто-нибудь объяснит?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
Я не могу понять, какая разница между пространством имен и областью в маршрутизации ruby-on-rails 3.
Может кто-нибудь объяснит?
namespace "admin" do
resources :posts, :comments
end
scope :module => "admin" do
resources :posts, :comments
end
Разница заключается в генерируемых путях.
Пути admin_posts_path
и admin_comments_path
для пространства имен, в то время как они просто posts_path
и comments_path
для области.
Вы можете получить тот же результат, что и пространство имен, передав параметр :name_prefix
в область видимости.
всегда помогают мне, поэтому вот пример:
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
из руководства rails
"Область пространства имен автоматически добавит :as
, а также :module
и :path
префиксы."
так
namespace "admin" do
resources :contexts
end
совпадает с
scope "/admin", as: "admin", module: "admin" do
resources :contexts
end
Оба области и пространства имен просматривают набор маршрутов для заданных параметров по умолчанию.
За исключением того, что для области нет параметров по умолчанию, а для пространства имен
:path
, :as
, :module
, :shallow_path
и :shallow_prefix
все параметры по умолчанию относятся к имени пространства имен.
Доступные параметры для области и пространства имен соответствуют матч.