我遇到了一些我以前沒有遇到過的路由名稱空間問題。這實際上是我正在做的一些寶石開發的一部分 - 但我已經重新解決了這個問題,以適應更通用的導軌情況。Rails 3路由 - 從命名空間內指定確切的控制器
基本上,我有一個名稱空間路由,但我希望它直接指向一個通用(頂級)控制器。
我的控制器是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"}
,但理想情況下,我寧願使用嵌套的聲明(爲便於閱讀) - 如果甚至有可能;我開始認爲它不是。
我原本以爲要做到這一點並創建命名路由太 - 但不幸的是,因爲這實際上是作爲一個gem的一部分打包成一個路由幫助器方法,所以我無法控制這個包裝方法。因此,我爲什麼要尋找一種方式來「爆發」當前的命名空間。 – theTRON 2011-04-18 05:49:55
並且作用域不會創建命名路線AFAIK – Geoffroy 2014-02-13 20:23:35
您可以在作用域末尾使用'as :: blah'來完成此操作。 – 2014-02-21 09:18:00