【发布时间】:2011-04-11 00:25:42
【问题描述】:
我遇到了一些我以前没有遇到过的路由命名空间问题。这实际上是我正在做的一些 gem 开发的一部分 - 但我已经修改了这个问题以适应更通用的 rails 情况。
基本上,我有一个命名空间路由,但我希望它指向一个通用(顶级)控制器。
我的控制器是PublishController,它处理许多不同类型模型的发布——它们都符合相同的接口,但可以在不同的命名空间下。我的路线如下所示:
# config/routes.rb
namespace :manage do
resources :projects do
get 'publish' => 'publish#create'
get 'unpublish' => 'publish#destroy'
end
end
问题在于这会创建以下路线:
manage_project_publish GET /manage/projects/:project_id/publish(.:format) {:controller=>"manage/publish", :action=>"create"}
manage_project_unpublish GET /manage/projects/:project_id/unpublish(.:format) {:controller=>"manage/publish", :action=>"destroy"}
这是我想要的路线,只是没有映射到正确的控制器。我已经尝试了所有我能想到的尝试并允许控制器不携带命名空间,但我很难过。
我知道我可以执行以下操作:
get 'manage/features/:feature_id/publish' => "publish#create", :as => "manage_project_publish"
产生:
manage_project_publish GET /manage/projects/:project_id/publish(.:format) {:controller=>"publish", :action=>"create"}
但理想情况下,我更喜欢使用嵌套声明(为了便于阅读)——如果可能的话;我开始认为不是。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 routing