如何为嵌套资源使用复数名称?

时间:2012-04-21 20:21:07

标签: ruby-on-rails ruby-on-rails-3 routing routes

我正在使用Ruby on Rails v3.2.2,我想为嵌套资源使用复数名称。也就是说,在我config/routes.rb我有(注:“类别”和“文章”是样本资源):

resources :categories do
  resources :articles do
    collection do
      get  'one'
      post 'two'
      put  'three'
    end
    member do
      get  'four'
      post 'five'
      put  'six'
    end
  end
end

以上陈述产生以下内容:

$ rake routes
  one_category_articles GET    /categories/:category_id/articles/one(.:format)      articles#one
  two_category_articles POST   /categories/:category_id/articles/two(.:format)      articles#two
three_category_articles PUT    /categories/:category_id/articles/three(.:format)    articles#three
  four_category_article GET    /categories/:category_id/articles/:id/four(.:format) articles#four
  five_category_article POST   /categories/:category_id/articles/:id/five(.:format) articles#five
   six_category_article PUT    /categories/:category_id/articles/:id/six(.:format)  articles#six
      category_articles GET    /categories/:category_id/articles(.:format)          articles#index
                        POST   /categories/:category_id/articles(.:format)          articles#create
   new_category_article GET    /categories/:category_id/articles/new(.:format)      articles#new
  edit_category_article GET    /categories/:category_id/articles/:id/edit(.:format) articles#edit
       category_article GET    /categories/:category_id/articles/:id(.:format)      articles#show
                        PUT    /categories/:category_id/articles/:id(.:format)      articles#update
                        DELETE /categories/:category_id/articles/:id(.:format)      articles#destroy
             categories GET    /categories(.:format)                                categories#index
                        POST   /categories(.:format)                                categories#create
           new_category GET    /categories/new(.:format)                            categories#new
          edit_category GET    /categories/:id/edit(.:format)                       categories#edit
               category GET    /categories/:id(.:format)                            categories#show
                        PUT    /categories/:id(.:format)                            categories#update
                        DELETE /categories/:id(.:format)                            categories#destroy

我想更改config/routes.rb中的语句,以便为 category_article <生成以下带复数的路由器/ em>“part”(也就是说,我想分别使用categories_article / categories_articles代替category_article / category_articles):

$ rake routes
# Note: I marked changes from the previous outputting with '=>'.
=>   one_categories_articles GET    /categories/:category_id/articles/one(.:format)      articles#one
=>   two_categories_articles POST   /categories/:category_id/articles/two(.:format)      articles#two
=> three_categories_articles PUT    /categories/:category_id/articles/three(.:format)    articles#three
=>   four_categories_article GET    /categories/:category_id/articles/:id/four(.:format) articles#four
=>   five_categories_article POST   /categories/:category_id/articles/:id/five(.:format) articles#five
=>    six_categories_article PUT    /categories/:category_id/articles/:id/six(.:format)  articles#six
=>       categories_articles GET    /categories/:category_id/articles(.:format)          articles#index
                             POST   /categories/:category_id/articles(.:format)          articles#create
        new_category_article GET    /categories/:category_id/articles/new(.:format)      articles#new
       edit_category_article GET    /categories/:category_id/articles/:id/edit(.:format) articles#edit
            category_article GET    /categories/:category_id/articles/:id(.:format)      articles#show
                             PUT    /categories/:category_id/articles/:id(.:format)      articles#update
                             DELETE /categories/:category_id/articles/:id(.:format)      articles#destroy
                  categories GET    /categories(.:format)                                categories#index
                             POST   /categories(.:format)                                categories#create
                new_category GET    /categories/new(.:format)                            categories#new
               edit_category GET    /categories/:id/edit(.:format)                       categories#edit
                    category GET    /categories/:id(.:format)                            categories#show
                             PUT    /categories/:id(.:format)                            categories#update
                             DELETE /categories/:id(.:format)  

1 个答案:

答案 0 :(得分:0)

如果您对提供的助手不满意,那么您可以使用魔术:

<%= link_to 'One', [:one, @category, Article] %>
# /categories/123/articles/one

<%= link_to 'Four', [:four, @category, @article] %>
# /categories/123/articles/456/four

<%= link_to 'Edit the article', [:edit, @category, @article] %>
# /categories/123/articles/456/edit

<%= link_to 'All articles for the category', [@category, Article] %>
# /categories/123/articles

可以使用相同的方法为:url帮助程序指定form_for选项。

我希望你有这个想法!

P.S。请注意使用类(如Article)来指定您要查看所有记录并使用模型实例(如@article)来表示您将要查看一篇文章。