我创建了一个名为 add_to_cart 的方法,每次用户将产品添加到他们的购物车时都会调用该方法 - 然后该方法检查该项目是否已经存在,如果存在,它将数量增加 +1。
我遇到的问题是,如果购物车中不存在产品,我不确定如何从我的模型中调用我的项目“创建”操作(在项目控制器中)。
我想我可以使用 Item.create(...) 但我宁愿只调用我的 Items 控制器中已经存在的 create 操作。
目前我有:
产品#索引视图
...
<%= 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
非常感谢我如何实现此重定向到我的创建操作的任何帮助!:)