所以我有一个Carts模型has_many
项。当我在Carts#show
页面上时,我希望有一个链接指向从该购物车中移除商品的操作,换句话说,会找到该商品并将其cart_id
设置为零。< / p>
我该怎么命名这个动作?应该使用哪个控制器 - CartsController
或ItemsController
?最后......我如何在我的routes.rb
中指定这条路线(CODE PLEASE FOR THE ONE)
修改
我应该更明确一点:当我从一个人的购物车中删除它时,我不想破坏它。每个项目都是唯一的,因此销毁它会破坏列表......这是不可取的。请注意,这也意味着此不是 HABTM关系...项目不能属于多个购物车。
答案 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