【问题标题】:Difference between resource and resources in rails routing?rails路由中资源和资源之间的区别?
【发布时间】:2012-07-06 05:08:56
【问题描述】:

rails 路由中resourceresources 有什么区别

 resource :geocoder

 resources :posts

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 routes


    【解决方案1】:

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

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

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

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

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

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

    在你的例子中:

    1. 控制器“地理编码器”是一种单一资源,可用于编辑、创建、更新等。
    2. 控制器“posts”是一种复数资源,用于处理传入的通用帖子,您可以对其进行索引、编辑、创建等操作

    【讨论】:

    • 我的困惑:创建单一资源的意义何在?假设我们已经定义了resource :geocoder;这是否意味着我们将在整个table 中拥有一个名为geocodersgeocoder 记录?
    • 在文章的链接中(自从我发布这篇文章后很久就更新了),他们实际上给出了一个很好的例子。一个名为 /profile(而不是 /profile:id)的单一资源对于始终显示当前登录用户的个人资料很有用。因此,单个地理编码器可能属于当前用户的位置,而多个地理编码器可能属于附近地点的集合。如果您想将自己的地理编码包含到该集合中,这取决于您。
    【解决方案2】:

    单一资源:

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

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

    #1
    /organizations/:id
    
    #2
    /organization #simply
    

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

    # in organizations#show
    @organization = current_user.organization
    

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

    # in routes.rb
    resource :organization
    

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

    而您使用resources 方法定义复数资源

    resources :organizations
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        我认为只是索引视图。

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

        resources :someresource, except: :index 
        

        为了避免reported bugs

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-18
          • 2016-11-12
          • 1970-01-01
          相关资源
          最近更新 更多