2017-09-25 42 views
1

我正在從頭開始創建一個wiki應用具有以下機構:如何命名嵌套的控制器和路由?

主控制器:維基 嵌套控制器:WikiCategories 嵌套控制器:WikiArticles

在我的config/routes.rb中我有:

resource :wiki do 
    resources :wiki_categories, :as => :categories 
    resources :wiki_articles, :as => :articles 
end 

我選擇來命名的類別和文章作爲控制器和WikiCategories以WikiArticles從我想在未來的博客中嵌套在其他類別和第三條控制器進行區分。

這給了我以下途徑:

/wiki/wiki_categories/new 
/wiki/wiki_articles/new 

有沒有辦法改寫的路線是:

/wiki/categories/new 
/wiki/articles/new 

...同時仍使用WikiCategories和WikiArticles控制器的名字呢?

回答

1

是的,它是通過指定controller,然後可以以任何喜歡的方式命名資源。

resource :wiki do 
    resources :categories, controller: 'wiki_categories' 
    resources :articles, controller: 'wiki_articles' 
end 

欲瞭解更多信息,請參閱the guide

+0

令人驚歎。謝謝。我正在通過指南尋找正確的選項,但不記得它被稱爲什麼。謝謝! – jfredson

1

可以使用path:選項,如下所示:

resource :wiki do 
    resources :wiki_categories, path: 'categories', :as => :categories 
    resources :wiki_articles, path: 'articles', :as => :articles 
end 

,這將給你:

/wiki/categories/... 
/wiki/articles/... 

見引導更多詳細信息,Translated Paths部分。

+0

謝謝!這工作,但'控制器'規範是一個更清潔,我正在尋找: 資源:類別,控制器:'wiki_categories' 雖然欣賞幫助。 – jfredson

1

我選擇來命名的類別和文章作爲控制器和WikiCategories以WikiArticles從我想在未來的博客中嵌套在其他類別和第三條控制器進行區分。

國際海事組織,它似乎像你有點違反慣例。正如Controller Namespaces and Routing討論的,爲什麼不這樣做:

namespace :wiki do 
    resources :categories, :articles 
end 

,這將給你:

wiki_categories GET /wiki/categories(.:format)    wiki/categories#index 
        POST /wiki/categories(.:format)    wiki/categories#create 
    new_wiki_category GET /wiki/categories/new(.:format)   wiki/categories#new 
edit_wiki_category GET /wiki/categories/:id/edit(.:format)  wiki/categories#edit 
     wiki_category GET /wiki/categories/:id(.:format)   wiki/categories#show 
        PATCH /wiki/categories/:id(.:format)   wiki/categories#update 
        PUT /wiki/categories/:id(.:format)   wiki/categories#update 
        DELETE /wiki/categories/:id(.:format)   wiki/categories#destroy 
     wiki_articles GET /wiki/articles(.:format)    wiki/articles#index 
        POST /wiki/articles(.:format)    wiki/articles#create 
    new_wiki_article GET /wiki/articles/new(.:format)   wiki/articles#new 
    edit_wiki_article GET /wiki/articles/:id/edit(.:format)  wiki/articles#edit 
     wiki_article GET /wiki/articles/:id(.:format)   wiki/articles#show 
        PATCH /wiki/articles/:id(.:format)   wiki/articles#update 
        PUT /wiki/articles/:id(.:format)   wiki/articles#update 
        DELETE /wiki/articles/:id(.:format)   wiki/articles#destroy 

然後,創建命名空間控制器,是這樣的:

app/controllers/wiki/categories.rb 

class Wiki::CategoriesController < ApplicationController 
    ... 
end 

app/controllers/wiki/articles.rb 

class Wiki::ArticlesController < ApplicationController 
    ... 
end 
+1

當然,這個問題更清潔和優雅的解決方案。 – vee