2012-07-06 103 views

回答

14

实质上,路由资源是指资源为控制器提供动作能力的时候。

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

如果是复数形式的资源作为一种方法来处理上任何项目的通用要求,然后一个单一的资源在手在当前项目工作的方式。换句话说,如果我有苹果的集合,为了检索特定的苹果,我必须通过发送苹果的ID来告诉路由器“苹果”检索哪个苹果。如果我已经有一个Apple,那么不需要ID。

通知通过看他们有什么动作(或航线)两者之间的区别:

  • 资源:指数,新,创建,显示,编辑,更新,破坏
  • 资源:新,创建,显示,编辑,更新,破坏

在您的例子:

  1. 控制器“geocoder”是一个单一的资源,您可以用来编辑,创建,更新等。
  2. 控制器“帖子”,是一个复合资源,将处理传入的通用帖子,您可以索引,编辑,创建..等
+1

我的困惑:什么是创造奇异的资源点;可以说我们已经定义了'resource:geocoder';这是否意味着我们将在一个名为'geocoders'的整个'表格中有一个geocoder记录? – illusionist 2015-10-21 10:07:47

+2

在文章的链接(自从发布这篇文章以来已更新),他们实际上给了一个很好的例子。称为/ profile(而不是/ profile:id)的单一资源对于始终显示当前登录的用户的配置文件将非常有用。因此,单个地理编码器可以属于当前用户的位置,其中多个地理编码器可以属于附近地点的集合。如果您想将自己的地理编码包含到该集合中,则取决于您。 – sksallaj 2015-10-21 17:09:55

8

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

有时候,你有资源的客户端总是仰望没有 引用的ID。例如,您希望/ profile始终显示当前登录用户的配置文件 。在这种情况下,您可以使用单个资源 来映射/配置文件(而不是/ profile /:id)到 显示操作。

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

3

我认为只是索引视图。

也有报道与资源助手和形式助手的路由问题。我个人使用的语法如下:

resources :someresource, except: :index 

为了避免reported bugs

4

奇异的资源:

有时候,你有资源的客户端总是仰望没有引用一个ID。例如,您希望/profile始终显示当前登录用户的配置文件。

或者,通常你当前登录的用户属于一个组织,所以要转到他/她的组织档案页面可以有两个途径

#1 
/organizations/:id 

#2 
/organization #simply 

这里,后来实现更有意义;是不是?你从协会组织对象

# in organizations#show 
@organization = current_user.organization 

定义这种奇异的资源使用resource方法:例

# in routes.rb 
resource :organization 

创建应用程序中的六个不同的路线,都映射到组织控制器:

enter image description here

然而,您使用定义了多个资源3210方法

resources :organizations 

enter image description here