如何命名嵌套控制器和路由?

时间:2017-09-25 19:22:16

标签: ruby-on-rails

我正致力于通过以下组织从头开始创建一个wiki应用程序:

主要控制者: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控制器名称?

3 个答案:

答案 0 :(得分:1)

是的,通过指定controller,可以按照您喜欢的方式命名资源。

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

有关详细信息,请参阅the guide

答案 1 :(得分: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部分。

答案 2 :(得分:1)

  

我选择将类别和文章控制器命名为WikiCategories和WikiArticles,以区别于我希望将来在博客嵌套下制作的其他类别和文章控制器。

IMO,看起来你的态度有点过时了。如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