如果属性具有不同的关联,则拒绝创建

时间:2016-02-01 15:20:01

标签: ruby-on-rails

我试图添加一个基本上检查添加到购物车的产品的验证。如果添加了产品,我想确保所有产品都来自同一个商店。如果没有,则应拒绝将产品添加到购物车。

我的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与数据库中已有的内容不匹配。

0 个答案:

没有答案