当前位置: 动力学知识库 > 问答 > 编程问答 >

ruby on rails - How to use plural names for nested resources?

问题描述:

I am using Ruby on Rails v3.2.2 and I would like to use plural names for nested resources. That is, in my config/routes.rb I have (note: "category" and "article" are sample resources):

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

The above statements generates the following:

$ 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

I would like to change statements in my config/routes.rb so to generate following routers with plural names only for the category_article "part" (that is, I would like to use categories_article/categories_articles respectively instead of 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)

网友答案:

If you aren't satisfied with the provided helpers then you can use the magic:

<%= 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

The very same approach can be used to specify the :url option for the form_for helper.

I hope you got the idea!

P.S. Note the using of a class (like Article) to specify that you want to see all records and using of a model instance (like @article) to say that you are about to see one article.

分享给朋友:
您可能感兴趣的文章:
随机阅读: