【发布时间】:2012-07-06 05:08:56
【问题描述】:
rails 路由中resource 和resources 有什么区别
resource :geocoder
和
resources :posts
它们之间的真正区别是什么?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 routes
rails 路由中resource 和resources 有什么区别
resource :geocoder
和
resources :posts
它们之间的真正区别是什么?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 routes
本质上,路由资源是指资源赋予控制器动作能力。
http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use
如果使用多元资源作为处理任何项目的通用请求的一种方式,那么单一资源就是处理手头当前项目的一种方式。
换句话说,如果我有一个苹果集合,要检索一个特定的苹果,我必须通过发送苹果的 ID 告诉路由器“苹果”要检索什么苹果。如果我已经拥有一个 Apple,则不需要 ID。
通过查看它们具有的操作(或路线)来注意两者之间的差异:
在你的例子中:
【讨论】:
resource :geocoder;这是否意味着我们将在整个table 中拥有一个名为geocoders 的geocoder 记录?
单一资源:
有时,您有一个资源,客户端总是在不引用 ID 的情况下查找该资源。例如,您希望/profile 始终显示当前登录用户的个人资料。
或者,通常您当前登录的用户属于单个组织,因此转到他/她的组织资料页面可以有两条路线
#1
/organizations/:id
#2
/organization #simply
这里,后面的实现更有意义;是不是?您从关联中获取组织对象
# in organizations#show
@organization = current_user.organization
要定义这样的单一资源,您可以使用resource 方法:示例
# in routes.rb
resource :organization
在您的应用程序中创建六个不同的路由,所有路由都映射到组织控制器:
而您使用resources 方法定义复数资源
resources :organizations
【讨论】:
http://guides.rubyonrails.org/routing.html#singular-resources
有时,您有一个客户总是在没有的情况下查找的资源 引用一个 ID。例如,您希望 /profile 始终显示 当前登录用户的个人资料。在这种情况下,您可以使用 将 /profile(而不是 /profile/:id)映射到 显示动作。
查看它的一个好方法是资源没有索引操作,因为它假设只有一个。
【讨论】:
我认为只是索引视图。
还报告了资源助手和表单助手的路由问题。就个人而言,我使用语法:
resources :someresource, except: :index
为了避免reported bugs。
【讨论】: