我试图添加一个基本上检查添加到购物车的产品的验证。如果添加了产品,我想确保所有产品都来自同一个商店。如果没有,则应拒绝将产品添加到购物车。
我的Cart
有很多line_items
。在line_item
中可以有几种产品。每个产品都属于store
。
我有一个非常复杂的方法可以将商品添加到购物车中。
def add_product(product_id, instruction, attributes)
values = attributes.values
collect_ids = values.map { |attribute| attribute[:product_attribute_id] }.compact
remove_empty_ids = collect_ids.reject(&:empty?)
attribute_values = remove_empty_ids.map(&:to_i)
similar_items = line_items.where(product_id: product_id)
# adds to cart if product doesn't exist in cart
if similar_items.empty?
current_item = line_items.create(product_id: product_id, instruction: instruction)
attribute_values.each do |attribute|
current_item.line_item_attributes.create(product_attribute_id: attribute)
end
else
line_item_id = get_line_item_id(similar_items, attribute_values)
# looks for products to see if all attributes matches
if line_item_id
current_item = line_items.find(line_item_id)
current_item.quantity += 1
current_item.save
# if none is found, then create new line item
else
current_item = line_items.create(product_id: product_id, instruction: instruction)
attribute_values.each do |attribute|
current_item.line_item_attributes.create(product_attribute_id: attribute)
end
end
end
current_item
end
现在,我想要做的就是拒绝创建,如果存在类似的项目,product.store
与数据库中已有的内容不匹配。