将路径从“/:id / model”更改为“/ model”

时间:2014-06-18 14:11:29

标签: ruby-on-rails

我想将我的路径从root / carts / 56更改为root / cart。

我应用了此问题Rails route to username instead of id中的逻辑,该问题将用户的ID更改为路径中的用户名。这是有效的,因为用户名可以设置为唯一。

我想要一个/ cart引导(显然)到访问者(没有用户)正在使用的一个购物车并摆脱 :购物车/:ID。我不要使用用户模型,否则我只会做@ user.cart(:user / cart)

所以我(可以理解)得到这个错误

Invalid route name, already in use: 'cart' 

因为这行

  match '/:carts/:id' => 'carts#show', :as =>'cart', :via => :get 

相关路线:

                carts GET    /carts(.:format)                     carts#index
                      POST   /carts(.:format)                     carts#create
             new_cart GET    /carts/new(.:format)                 carts#new
            edit_cart GET    /carts/:id/edit(.:format)            carts#edit
                 cart GET    /carts/:id(.:format)                 carts#show
                      PATCH  /carts/:id(.:format)                 carts#update
                      PUT    /carts/:id(.:format)                 carts#update
                      DELETE /carts/:id(.:format)                 carts#destroy

更新:

使用resource :cart, :only => :show # note 'resource' not 'resources' 我得到了改进,但是我可以以某种方式从路径中删除id吗?

http://localhost:3000/cart?id=52

是它给我的。

抱歉 - 在网址中为我提供ID的行是

 <li><%= link_to "Cart", cart_path(id: session[:cart_id]) %></li>

我真的需要一个独特的资源吗?我正在像这样的会议中创建购物车

  <% if session[:cart_id] == nil %>
        <li><%= link_to "Cart", new_cart_path %></li>
  <% else %>

如果他们还没有创建购物车,他们会在访问该页面时创建一个购物车。

我实际上遵循了购物车here

的教程

1 个答案:

答案 0 :(得分:1)

在路线档案中使用

resource :cart, :only => :show  # note 'resource' not 'resources'

这将为您提供一个可以调用的cart_path。它将在carts_controller中点击show方法。如果你需要/ root / theres几种方法来添加它。

将其放在routes.rb文件中声明的用户路径上方。

您可能需要进行一些验证,以确保用户不会选择保留的名称。