Difference between resource and resources methods

后端 未结 2 1140
傲寒
傲寒 2020-11-30 23:50

What is the logical difference between resource and resources methods

Here is some examples:

resource :orders, :only =>          


        
相关标签:
2条回答
  • 2020-11-30 23:54

    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.

    0 讨论(0)
  • 2020-12-01 00:05

    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

    0 讨论(0)
提交回复
热议问题