2013-06-27 41 views
5

這是常見名稱空間的外觀。在命名空間下向指定的路由幫助程序添加前綴

namespace :admin do 
    resources :posts 
end 

然後它創建一個像這樣的命名路線;

new_admin_post_path 

這是我的問題;我怎麼能添加一個前綴(如在這個例子中的「新」)命名空間下的命名路線?

假設我的路線定義喜歡這個;

namespace :admin do 
    get 'post/new' => 'posts#new', as: 'post' 
end 

它創建了一個命名的路線,如;

admin_post_path 

我要「新」字頭加入到這個命名路線,使它看起來像new_admin_post_path,我不希望使用resources

+0

您的帖子控制器駐留在admin命名空間中嗎?如果是,那麼你可以從你寫的第一種方式實現它。 –

+0

是的。但我不想這樣做,或使用'resources'方法自定義。 –

回答

9

只需嘗試路由中的代碼。

namespace :admin, as: '' do 
    get '/post/new' => 'posts#new', as: 'new_admin_post' 
end 

如果你不想讓管理員名稱空間爲零,那麼你可以做到這一點。爲此,您需要將該路由置於名稱空間之外:管理塊在路由中

namespace :admin do 
    # your other routes 
end 

get '/admin/post/new' => 'admin/posts#new', :as => 'new_admin_post' 
+0

還有其他路由映射在'admin'命名空間下,因此沒有必要刪除「admin」前綴並手工省略每個路由。如果可能的話,我希望能夠在命名空間下的命名路由中添加前綴,比如'resources'能夠做到的。 –

+0

請檢查編輯答案。 –

+1

我不喜歡強迫從命名空間中獲取路由的想法,但我認爲我現在將使用此解決方案。我檢查了很多選項並閱讀了一些源代碼,但對於像這樣的問題,這非常耗時。 –