数组中的每个值*不同数组中的另一个值

时间:2014-02-06 16:00:03

标签: ruby-on-rails arrays math cart

我正在尝试创建一个电子商务风格的网站,并试图从头开始制作购物篮/购物车。由于用户无需登录即可将产品添加到虚拟购物篮中,我通过存储在浏览器中的cookie进行此过程。 Cookie使用以下格式:

Product.ID|Quantity/Product2.ID|Quantity

我使用一些代码拆分数组并删除'/和|我留下了两个阵列。一个包含所有产品ID,另一个包含数量。

我需要一种方法将数组中的每个值与另一个数组中的正确值进行匹配。例如:

array1 = ["1", "4", "7"] # Products ID'S
array2 = ["1, "2, "1"] # Quantities

我需要能够做Product(1).price X 1,Product(4).price X 2,Product(7).price X(1)

At the moment I do @product = Product.find_all_by_id(array1) which does return my products. I then need to do each products price X the quantity.

有没有更好/更清洁的方式来做这个或任何人都可以帮助?我不想将宝石/插件用于预制的推车/篮子系统。

非常感谢

2 个答案:

答案 0 :(得分:0)

以下内容允许您迭代第一个索引并从第二个索引中获取匹配值:

array1.each_with_index do |id, index|
    product = Product.find(id)
    cost = product.price * array2[index].to_i
    # Do something with the cost 
end

答案 1 :(得分:0)

我建议这样做

假设您的购物篮变量在Cookie中有购物车价值

basket = "Product1.ID|Quantity/Product2.ID|Quantity"

通过执行

将其转换为哈希
Hash[basket.split("/").map{|p| p.split("|")}]

现在,您将获得一个哈希,产品ID为关键,数量为值

products = {"Product1.ID" => "Quantity", "Product2.ID" => "Quantity"}

products.each do |product_id, quantity|
  cost = Product.find(product_id).price * quantity.to_i
end