资源和资源方法之间的区别

resourceresources方法之间的逻辑差别是什么?

这里有一些例子:

 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 

它看起来像方法resource不会创buildindex路线,而在某些情况下帮助者是不同的(new_order和new_orders)。 为什么?

其实你是对的, resource不应该创build索引操作,除非你明确地要求索引操作,这样:

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

助手也应该有所不同,但不像你的例子那么多,因为惯例是用resource方法使用单数forms,用resource复数forms

 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 

而逻辑上的区别是声明你的逻辑上不能有你的应用程序中的资源的复数,例如pipe理员或其他

在较高的层面上, resource的意图是宣布只有这些资源中的一种永远存在。 例如:

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

作为用户,我应该只能更新我自己的configuration文件。 我永远不能编辑其他用户的configuration文件,所以不需要像/users/1/profile/edit这样的URLscheme。 相反,我使用/profile/edit ,并且控制器知道使用当前用户的ID而不是在URL中传递的ID(因为没有)。

这就是为什么你没有得到resourceindex操作:只有一个资源,所以在“列出”它们是没有意义的。