Rails:制作这条路线的RESTful方法是什么?

时间:2012-06-09 14:22:01

标签: ruby-on-rails rest has-many

所以我有一个Carts模型has_many项。当我在Carts#show页面上时,我希望有一个链接指向从该购物车中移除商品的操作,换句话说,会找到该商品并将其cart_id设置为零。< / p>

我该怎么命名这个动作?应该使用哪个控制器 - CartsControllerItemsController?最后......我如何在我的routes.rb 中指定这条路线(CODE PLEASE FOR THE ONE)

修改

我应该更明确一点:当我从一个人的购物车中删除它时,我不想破坏它。每个项目都是唯一的,因此销毁它会破坏列表......这是不可取的。请注意,这也意味着此不是 HABTM关系...项目不能属于多个购物车。

1 个答案:

答案 0 :(得分:2)

路线:

resources :carts do
  resources :items
end

这会产生以下路线:

cart_items GET    /carts/:cart_id/items(.:format)          items#index
               POST   /carts/:cart_id/items(.:format)          items#create
 new_cart_item GET    /carts/:cart_id/items/new(.:format)      items#new
edit_cart_item GET    /carts/:cart_id/items/:id/edit(.:format) items#edit
     cart_item GET    /carts/:cart_id/items/:id(.:format)      items#show
               PUT    /carts/:cart_id/items/:id(.:format)      items#update
               DELETE /carts/:cart_id/items/:id(.:format)      items#destroy
         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
               PUT    /carts/:id(.:format)                     carts#update
               DELETE /carts/:id(.:format)                     carts#destroy

所以你真的很明确地描述了物品 - 推车的关系。

您可以像往常一样使用控制器。

我不知道你为什么要将cart_id设置为nil而不是删除它,但这就是你要这样做的方法:

# in items_controller.rb

def destroy
    @item = Item.find(params[:id])
    @item.update_attributes(:cart_id => params[:cart_id])

    respond_to do |format|
      format.html { redirect_to items_url }
      format.json { head :no_content }
    end
end