48

rails routingresource和in有什么区别resources

 resource :geocoder

 resources :posts

它们之间的真正区别是什么?

4

4 回答 4

56

本质上,路由资源是资源赋予控制器动作能力的时候。

http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use

如果将多元化资源用作处理任何项目的通用请求的一种方式,那么单一资源就是处理手头当前项目的一种方式。

所以换句话说,如果我有一个苹果集合,要检索一个特定的苹果,我必须通过发送苹果的 ID 告诉路由器“苹果”要检索什么苹果。如果我已经有一个 Apple,则不需要 ID。

通过查看它们具有的操作(或路线)来注意两者之间的差异:

  • 资源:索引、新建、创建、显示、编辑、更新、销毁
  • 资源:新建、创建、显示、编辑、更新、销毁

在您的示例中:

  1. 控制器“地理编码器”是一个单一的资源,可用于编辑、创建、更新等。
  2. 控制器“posts”是一个复数资源,它将处理传入的通用帖子,您可以索引、编辑、创建……等
于 2012-07-06T05:29:06.843 回答
25

奇异资源:

有时,您有一个资源,客户端总是在不引用 ID 的情况下查找该资源。例如,您希望/profile始终显示当前登录用户的个人资料。

或者,通常您当前登录的用户属于单个组织,因此转到他/她的组织资料页面可以有两条路线

#1
/organizations/:id

#2
/organization #simply

在这里,后面的实现更有意义;是不是?您从关联中获取组织对象

# in organizations#show
@organization = current_user.organization

要定义这样的单一资源,您可以使用resource方法:示例

# in routes.rb
resource :organization

在您的应用程序中创建六个不同的路由,所有路由都映射到 Organizations 控制器:

在此处输入图像描述

而您使用resources方法定义多个资源

resources :organizations

在此处输入图像描述

于 2015-10-21T11:31:14.920 回答
14

http://guides.rubyonrails.org/routing.html#singular-resources

有时,您有一个资源,客户端总是在不引用 ID 的情况下查找该资源。例如,您希望 /profile 始终显示当前登录用户的个人资料。在这种情况下,您可以使用单一资源将 /profile(而不是 /profile/:id)映射到 show 操作。

查看它的一个好方法是资源没有索引操作,因为它应该只是一个。

于 2012-07-06T05:15:49.943 回答
3

我认为只是索引视图。

还报告了资源助手和表单助手的路由问题。就个人而言,我使用以下语法:

resources :someresource, except: :index 

为了避免报告的错误

于 2012-07-06T05:17:36.363 回答