0

我需要有关拥有多个 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

任何见解都将受到充分赞赏。

4

1 回答 1

1

1.您应该将您的更改where_line_item_with(prod_id)为以下内容:

def where_line_item_with(prod_id)
  line_items.where(:product_id => prod_id).first
end

由于where返回一个数组,你不能update_quantity(@line_item.quantity)在一个数组上做。

2.In exists_in_collect?(items)- 在这里您的目标是查找购物车中的商品是否包含与新商品相似的商品。它应该更新如下:

def exists_in_collect?(items)
  items.each do |item|
    if color == item.color && size == item.sizes && extra == item.extra && product == item.product
        return true
    end  
  end
  return false
end
于 2013-06-28T18:37:01.010 回答