ruby-on-rails 3路由的范围和命名空间之间的区别
我不明白在ruby-on-rails 3的路由中命名空间和范围之间有什么区别。
有人可以解释吗?
namespace "admin" do resources :posts, :comments end scope :module => "admin" do resources :posts, :comments end
区别在于生成的path。
path是命名空间的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
从导轨上
“命名空间范围将自动添加: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
选项,全部默认为名称空间的名称。
范围和命名空间的 可用选项对应于匹配的选项 。