0

所以我有一个 Carts 模型,其中包含has_manyItems。当我在Carts#show页面上时,我想要一个指向从购物车中删除项目的操作的链接,换句话说,它会找到该项目并将其设置cart_id为 nil。

我应该给这个动作起什么名字?它应该在哪个控制器中 -CartsControllerItemsController?最后......我如何在我的routes.rb (请为此提供代码)中指定这条路线

编辑

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

4

1 回答 1

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_idnil而不是删除它,但这就是您的做法:

# 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
于 2012-06-09T14:24:03.890 回答