我前几天使用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
但是,我收到以下错误,
答案 0 :(得分:1)
因为你的add_item方法应该是两个参数,但你的params是哈希,不能使用params[:id, :size]
替换它params[:id], params[:size]
。