0

ユーザーがカートに商品を追加するたびに呼び出されるadd_to_cartというメソッドが作成されました。このメソッドは、アイテムが既に存在するかどうかを確認し、存在する場合は数量を+1します。

私が抱えている問題は、商品がカートにまだ存在しない場合に、モデルからアイテムの「作成」アクションを(アイテムコントローラーで)呼び出す方法がわからないことです。

Item.create(...)を使用できると思いますが、Itemsコントローラーに既に存在するcreateアクションを呼び出すだけです。

現在私は持っています:

Products#インデックスビュー

 ...
 <%= button_to "Add to Cart", add_to_cart_path(:product_id => product), :method => :post %>
 ...

ルート

 ...
 post '/add_to_cart/:product_id' => 'carts#add_to_cart', :as => 'add_to_cart'
 ...

カートコントローラー

 class CartsController < ApplicationController

 def show
   @cart = current_cart
 end

 def add_to_cart
   current_cart.add_item(params[:product_id])
   redirect_to cart_path(current_cart.id)
 end

 end

カートモデル

class Cart < ActiveRecord::Base
has_many :items

def add_item(product_id)
        item = items.where('product_id = ?', product_id).first
    if item
        # increase the quantity of product in cart
        item.quantity + 1
        save
    else
        save # "THIS IS WHERE I WANT TO CALL ITEMS CONTROLLER CREATE"
    end
end

アイテムコントローラー

class ItemsController < ApplicationController

def create
    @product = Product.find(params[:product_id])
    @item = Item.create!(:cart => current_cart, :product => @product, :quantity => 1, :unit_price => @product.price)
    redirect_to cart_path(current_cart.id)
end

end

作成アクションへのこのリダイレクトをどのように達成できるかについての助けは本当にありがたいです!:)

4

1 に答える 1

1

Cartモデルはコントローラー メソッドを呼び出すことができず、呼び出す必要はありません。

メソッドは次のようになります。

class Cart < ActiveRecord::Base
  has_many :items

  def add_item(product_id)
    item = items.find_or_create_by_product_id(product_id)
    item.quantity += 1
    item.save
  end
end

次に、あなたのCartsController. add_itemメソッドは、ユーザーを本来あるべき場所にリダイレクトできます。

于 2012-11-03T20:10:07.163 に答える