如果添加相同产品,则更新购物车的数量

时间:2014-03-06 11:26:13

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord shopping-cart

我是ROR的新手。我正在建设电子商务网站。在购物车中,如果我尝试添加产品,则在之前未添加产品时添加。现在我想如果用户添加相同的产品,那么它的数量应该增加。

这是carts_controller.rb中的add_to_cart方法,提前谢谢。

def add_to_cart
  @cart = Cart.find_by_Product_id_and_User_id( params[:product_id], current_user.id)
   if @cart.nil?
    @cart = Cart.create(:User_id => current_user.id, :Product_id => params[:product_id], :Quantity => '1')
  else 
    @cart.update(:Quantity +=> '1')
  end
    redirect_to view_cart_path
end

1 个答案:

答案 0 :(得分:1)

您的架构看起来很奇怪:为什么购物车有产品ID?这表明购物车“属于”产品,这是错误的。我希望每个用户都有一个购物车,并且购物车可以通过连接表获得产品列表。像这样:

class User 
  has_one :cart
end

#user_id
class Cart
  belongs_to :user
  has_many :cart_products
  has_many :products, :through => :cart_products
end

#cart_id, product_id, :quantity
class CartProduct
  belongs_to :cart
  belongs_to :product
end

#various fields to do with the specific product
class Product
  has_many :cart_products
  has_many :carts, :through => :cart_products
end

如果这是架构,那么我会像这样处理数量更新:

#in Cart class
def add_product(product)
  if cart_product = self.cart_products.find_by_product_id(product.id)
    cart_product.quantity += 1
    cart_product.save
    cart_product
  else
    self.cart_products.create(:product_id => product.id, :quantity => 1)
  end
end