Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between resource and resources methods

What is the logical difference between resource and resources methods

Here is some examples:

resource :orders, :only => [:index, :create, :show]  > rake routes  orders POST       /orders(.:format)            orders#create         GET        /orders(.:format)            orders#show   resources :orders, :only => [:index, :create, :show]  > rake routes  orders GET        /orders(.:format)            orders#index         POST       /orders(.:format)            orders#create   order GET        /orders/:id(.:format)        orders#show   resource :orders  > rake routes      orders POST       /orders(.:format)            orders#create  new_orders GET        /orders/new(.:format)        orders#new edit_orders GET        /orders/edit(.:format)       orders#edit             GET        /orders(.:format)            orders#show             PUT        /orders(.:format)            orders#update             DELETE     /orders(.:format)            orders#destroy   resources :orders  > rake routes      orders GET        /orders(.:format)            orders#index             POST       /orders(.:format)            orders#create   new_order GET        /orders/new(.:format)        orders#new  edit_order GET        /orders/:id/edit(.:format)   orders#edit       order GET        /orders/:id(.:format)        orders#show             PUT        /orders/:id(.:format)        orders#update             DELETE     /orders/:id(.:format)        orders#destroy 

It looks like method resource does not create route for index, and helpers in some cases are different (new_order and new_orders). Why?

like image 578
alexkv Avatar asked Feb 08 '12 14:02

alexkv


People also ask

What is difference between resource and resources?

Declaring a resource or resources generally corresponds to generating many default routes. resource is singular. resources is plural.

What is difference between resource and resources in routes on Rails?

Difference between singular resource and resources in Rails routes. So far, we have been using resources to declare a resource. Rails also lets us declare a singular version of it using resource. Rails recommends us to use singular resource when we do not have an identifier.

What are resources in Ruby on Rails?

Any object that you want users to be able to access via URI and perform CRUD (or some subset thereof) operations on can be thought of as a resource. In the Rails sense, it is generally a database table which is represented by a model, and acted on through a controller.


2 Answers

At a high level, the intent of resource is to declare that only one of these resources will ever exist. For example:

resource :profile, :only => [:edit, :update] 

As a user, I should only be able to update my own profile. I should never be able to edit other users' profiles, so there's no need for a URL scheme like /users/1/profile/edit. Instead, I use /profile/edit, and the controller knows to use the current user's ID rather than the ID passed in the URL (since there is none).

That's why you don't get an index action with resource: there's only one resource, so there's no sense in "listing" them.

like image 63
Brandan Avatar answered Sep 25 '22 09:09

Brandan


Actually you are right, resource should not create an index action, unless you ask for the index action explicitly, this way:

resource :orders, :only => [:index, :create, :show] 

Helpers should differ too, but not that much as in your example, because the convention is to use a singular form with the resource method, and the plural with the resources

resources :orders => rake routes       orders GET        /orders(.:format)            orders#index             POST       /orders(.:format)            orders#create   new_order GET        /orders/new(.:format)        orders#new  edit_order GET        /orders/:id/edit(.:format)   orders#edit       order GET        /orders/:id(.:format)        orders#show             PUT        /orders/:id(.:format)        orders#update             DELETE     /orders/:id(.:format)        orders#destroy  resource :order => rake routes       order POST       /order(.:format)            orders#create   new_order GET        /order/new(.:format)        orders#new  edit_order GET        /order/:id/edit(.:format)   orders#edit             GET        /order/:id(.:format)        orders#show             PUT        /order/:id(.:format)        orders#update             DELETE     /order/:id(.:format)        orders#destroy 

And the logical difference is to declare you logically can't have the plural for resource in your app, for example Admin or whatever

like image 30
alony Avatar answered Sep 23 '22 09:09

alony