ユーザーがカートに商品を追加するたびに呼び出される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
作成アクションへのこのリダイレクトをどのように達成できるかについての助けは本当にありがたいです!:)