是否有办法在admin
范围下生成一组路线,而不必创建新的物理目录(如namespace
要求您)。
我知道在Rails 3中路由映射器上有一个scope
方法,这看起来像我想要的那样,但显然它在Rails 2.3.x中不存在
我的目标是建立一条这样的路线:"/admin/products"
映射到"app/controllers/products_controller
, 不 "app/controllers/admin/products_controller"
。
有没有办法在Rails 2.3.x中实现这一目标?
答案 0 :(得分:4)
当然,您需要使用:name_prefix
和:path_prefix
来获得您想要的内容:
ActionController::Routing::Routes.draw do |map|
map.with_options :name_prefix => 'admin_', :path_prefix => 'admin' do |admin|
admin.resources :products
end
end
将产生路线:
admin_products GET /admin/products(.:format) {:controller=>"products", :action=>"index"} POST /admin/products(.:format) {:controller=>"products", :action=>"create"} new_admin_product GET /admin/products/new(.:format) {:controller=>"products", :action=>"new"} edit_admin_product GET /admin/products/:id/edit(.:format) {:controller=>"products", :action=>"edit"} admin_product GET /admin/products/:id(.:format) {:controller=>"products", :action=>"show"} PUT /admin/products/:id(.:format) {:controller=>"products", :action=>"update"} DELETE /admin/products/:id(.:format) {:controller=>"products", :action=>"destroy"}
答案 1 :(得分:2)
似乎没有详细记录,但namespace
实际上是with_options
的一个非常简单的包装器。它设置了:path_prefix
,:name_prefix
和:namespace
选项,我相信您只想要第一个,所以:
map.with_options :path_prefix => 'admin/' do |admin|
admin.connect ':controller/:action'
end
我正在通过阅读代码来解决这个问题。看起来:name_prefix
用于为命名路由提供前缀,而:namespace
用于实际查看子目录。