我需要有关拥有多个 line_items 的购物车对象的帮助。如果创建了购物车中的 line_item 并且它具有与购物车中已经存在的 line_item 相同的属性,我只想更新预先存在的 line_items 数量,而不是创建具有单独数量的重复对象。
我在我的模型中编写了一些方法来尝试使其工作,但它不起作用。下面是我的代码:
楷模
class LineItem < ActiveRecord::Base
attr_accessible :cart_id, :product_id, :quantity, :unit_price, :product, :cart, :color_id, :size_id, :extra_id
belongs_to :cart
belongs_to :product
belongs_to :color
belongs_to :size
belongs_to :extra
validates :quantity, :presence => true
def update_quantity(qty)
quantity += qty
quantity.save
end
def exists_in_collect?(items)
if items.include?(product)
if color == items.color && size == items.sizes && extra == items.extra
return true
end
else
return false
end
end
end
class Cart < ActiveRecord::Base
attr_accessible :purchased_at
has_many :line_items
has_one :order
def where_line_item_with(prod_id)
line_items.where(:product_id => prod_id)
end
end
控制器
class LineItemsController < ApplicationController
def new
@line_item = LineItem.new
end
def create
@line_item = LineItem.new(params[:line_item].merge(:cart => current_cart))
if @line_item.exists_in_collect?(current_cart.line_items)
current_cart.where_line_item_with(product.id).update_quantity(@line_item.quantity)
@line_item.destroy!
else
@line_item.save!
@line_item.update_attributes!(:unit_price => @line_item.item_price)
end
redirect_to current_cart_url
end
def update
@line_item = LineItem.find(params[:id])
@line_item.update_attributes(params[:line_item])
redirect_to current_cart_url
end
任何见解都将受到充分赞赏。