如何将尺寸属性添加到购物车项目

时间:2016-03-04 01:39:17

标签: ruby-on-rails ruby-on-rails-4

我前几天使用Ruby on Rails构建了一个可用的购物车系统,并遵循了教程的指导。现在我想修改现有的购物车项目,以合并放置在购物车中的特定商品的尺寸。

我创建了一个迁移文件,将一个size列添加到Products表中,然后我开始分别修改CartItem类和Cart类文件。

class CartItem
    attr_reader :product_id, :quantity, :size

    def initialize product_id, quantity = 1, size
        @product_id = product_id
        @quantity = quantity
        @size = size
    end

    def increment
        @quantity = @quantity + 1
    end

    def product
        Product.find product_id
    end

    def total_price
        # puts "Hello cart_item"
        product.price * quantity
    end
end

class Cart
    attr_reader :items

    def self.build_from_hash hash
        items = if hash["cart"] then
            hash["cart"]["items"].map do |item_data|
                CartItem.new item_data["product_id"], item_data["quantity"], item_data["size"]
            end
        else
            []
        end

        new items
    end

    def initialize items = []
        @items = items
    end

    def add_item product_id, size
        item = @items.find { |item| item.product_id == product_id
                                    item.size == size }
        if item
            item.increment
        else
            @items << CartItem.new(product_id, size)
        end
    end

    def empty?
        @items.empty?
    end

    def count
        @items.length
    end

    def serialize
        items = @items.map do |item| 
            { 
                "product_id" => item.product_id, 
                "quantity" => item.quantity,
                "size" => item.size 
            } 
        end

        {
            "items" => items
        }
    end

    def total_price(shipping_price = 0)
        # puts "Hello cart"
        @items.inject(0) { |sum, item| sum + item.total_price } + shipping_price
    end
end

但是,我收到以下错误,

error

1 个答案:

答案 0 :(得分:1)

因为你的add_item方法应该是两个参数,但你的params是哈希,不能使用params[:id, :size]替换它params[:id], params[:size]