rails路由中的资源和资源之间的差异?

Man*_*ava 30 ruby routes ruby-on-rails ruby-on-rails-3

rails路由之间resource和之间有什么区别resources

 resource :geocoder
Run Code Online (Sandbox Code Playgroud)

 resources :posts
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别?

sks*_*laj 37

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

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

如果使用复数资源作为处理任何项目的泛型请求的方式,则单个资源是处理当前项目的一种方式.

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

通过查看它们具有的行为(或路线),注意两者之间的差异:

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

在你的例子中:

  1. 控制器"地理编码器"是一种可用于编辑,创建,更新等的单一资源.
  2. 控制器"发布",是一个多元资源,将处理您可以索引,编辑,创建等的传入通用帖子

  • 我的困惑:创造单一资源有什么意义?假设我们已经定义了`resource :geocoder`;这是否意味着我们将在整个名为“geocoders”的“表”中拥有单个“geocoder”记录? (4认同)
  • 在文章的链接中(自我发布之后很久就更新了),他们实际上给出了一个很好的例子.称为/ profile(而不是/ profile:id)的单一资源对于始终显示当前登录用户的配置文件非常有用.因此,单个地理编码器可以属于当前用户的位置,其中多个地理编码器可以属于附近地点的集合.如果您想将自己的地理编码包含在该集合中,则由您决定. (3认同)

ill*_*ist 14

奇异资源:

有时,您拥有一个客户端始终查找而不引用ID的资源.例如,您希望/profile始终显示当前登录用户的配置文件.

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

#1
/organizations/:id

#2
/organization #simply
Run Code Online (Sandbox Code Playgroud)

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

# in organizations#show
@organization = current_user.organization
Run Code Online (Sandbox Code Playgroud)

要定义这样的奇异资源,请使用resource方法:示例

# in routes.rb
resource :organization
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

resources :organizations
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Ism*_*reu 12

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

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

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