Differenza tra metodi di risorse e risorse

Qual è la differenza logica tra i metodi di resource e resources

Ecco alcuni esempi:

 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 

Sembra che la resource metodo non crei la rotta per l’ index e in alcuni casi gli helper siano diversi (new_order e new_orders). Perché?

In realtà hai ragione, la resource non dovrebbe creare un’azione indice, a meno che tu non chieda esplicitamente l’azione dell’indice, in questo modo:

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

Anche gli helper dovrebbero differire, ma non tanto come nel tuo esempio, perché la convenzione è usare una forma singolare con il metodo della resource , e il plurale con le 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 

E la differenza logica è dichiarare che non è ansible avere il plurale per la risorsa nella tua app, ad esempio l’amministratore o qualsiasi altra cosa

Ad un livello elevato, l’intento della resource è dichiarare che solo una di queste risorse sarà mai esistita. Per esempio:

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

Come utente, dovrei solo essere in grado di aggiornare il mio profilo. Non dovrei mai essere in grado di modificare i profili di altri utenti, quindi non c’è bisogno di uno schema URL come /users/1/profile/edit . Invece, io uso /profile/edit , e il controller sa di usare l’ID dell’utente corrente piuttosto che l’ID passato nell’URL (poiché non ce n’è).

Ecco perché non ottieni un’azione index con la resource : c’è solo una risorsa, quindi non ha senso inserirle nella lista.