2014-02-06 3 views
0

Я пытаюсь создать сайт стиля электронной коммерции и пытаюсь сделать корзину/корзину с нуля. Поскольку пользователи смогут добавлять продукты в виртуальную корзину без входа в систему, я делаю этот процесс через файл cookie, хранящийся в браузере. Куки использует следующий формат:Каждое значение в массиве * Другое значение в другом массиве

Product.ID|Quantity/Product2.ID|Quantity 

Я использую код, чтобы разделить массив и удалить «/ и |» и я остаюсь с двумя массивами. Один из них содержит все идентификаторы продукта и другие, содержащие количества.

Мне нужен способ сопоставить каждое значение в массиве с правильным значением в другом массиве. Например:

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

мне нужно, чтобы быть в состоянии сделать продукт (1) .price Х 1, продукта (4) .price X 2 продукта (7) .price Х (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. 

Есть ли лучший/чистый способ сделать это или может кто-нибудь помочь? Я НЕ хочу использовать драгоценный камень/плагин для готовой корзины/корзины.

Большого спасибо

Lee

ответ

0

Я предлагаю делать это

Допустим, что ваша корзина имеет значение вашей корзины в файле cookie

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

Преобразование его в хэш, делая

Hash[basket.split("/").map{|p| p.split("|")}] 

Теперь вы получите хэш с идентификатором продукта в качестве ключа и количества в качестве значения

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

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

Это действительно хорошо, за исключением сказать, корзина = «3 | 1/4 | 1/3 | 2», поэтому есть три записи. Если я запустил команду convert into, она возвращает только {"3" => "2", "4" => "1"} - Две записи в обратном порядке? Есть предположения. Еще раз спасибо! –

+0

Это потому, что у вас один и тот же идентификатор продукта дважды. Хэш не может иметь дубликаты ключей. Это возможный сценарий в вашем случае? – usha

+0

Я вижу! Нет. Мне нужно добавить код, который не позволяет дублировать идентификаторы продуктов. Вместо этого он просто обновит количество. Спасибо! Что произойдет, если количество дублируется? Скажем, у нас есть «5 | 2/4 | 1/3 | 2» - это создаст ошибку? –

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 
Смежные вопросы