0

has_manyだから私はアイテムのカートモデルを持っています。ページにいるときCarts#show、そのカートからアイテムを削除するアクションへのリンク、つまり、アイテムを見つけてcart_idnil に設定するアクションへのリンクが必要です。

このアクションには何と名前を付ける必要がありますか? それはどのコントローラーにある必要があります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_idtoを設定する理由はわかりませんが、次のようにします。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
于 2012-06-09T14:24:03.890 に答える