Spree::OrderPopulator.populate упорядочивает два элемента по одному
У меня есть программа, в которой я пытаюсь программно создавать заказы Spree. Я использую класс OrderPopulator, чтобы завершить это. Мой код:
populator = Spree::OrderPopulator.new current_order(create_order_if_necessary: true), current_currency
products.each do |product|
variant = Spree::Variant.find_by product_id: product.id, is_master: true
puts "Pre-Items: #{current_order.line_items.count}"
populator.populate({ products: { product_id: product.id, variant_id: variant.id }, quantity: 1 })
puts "Post-Items: #{current_order.line_items.count}"
puts "Products: #{current_order.line_items.first.quantity}"
end
Это печатает:
Pre-Items: 0
Post-Items: 1
Products: 2
Products
должно быть 1, потому что это количество я указал при добавлении элемента. Что я делаю неправильно?
1 ответ
Вы немного путаете продукты и варианты. В Spree 2.1 у нас есть немного кода:
https://github.com/spree/spree/blob/v2.1.6/core/app/models/spree/order_populator.rb#L21-L27
Позволяет добавить товар и / или вариант. Поскольку вы указали два идентификатора в хэше продуктов, он попытается добавить первый (product.id) и второй (option.id).
Я полагаю, что ваше количество равно 2, потому что ваш product.id == option.id.
Я бы рекомендовал добавлять вещи только по идентификатору варианта, поэтому попробуйте:
populator.populate({ variants: { variant_id: variant.id }, quantity: 1 })
Spree 2.2.x покончил с некоторыми из этих сложностей и теперь заполнение просто принимает вариант id:
https://github.com/spree/spree/blob/v2.2.1/core/app/models/spree/order_populator.rb#L13-L16