我有一个基于Spree的程序,客户可以在指定日期订购产品。我试图覆盖订单创建逻辑,以使用正确的产品创建多个订单。
处理表单帖子的方法如下:
class OrderController < ApplicationController
include Spree::Core::ControllerHelpers::Auth
include Spree::Core::ControllerHelpers::Order
include Spree::Core::ControllerHelpers::Common
⋮
def process_order
params[:order].each do |index, order|
products = []
order[:product_id].each do |index, id|
products << Spree::Product.find(id) if id and not id.empty?
end
if products.any?
populator = Spree::OrderPopulator.new current_order(create_order_if_necessary: true), current_currency
current_order.update_attribute :delivery_date, Date.parse(order[:date])
products.each do |product|
variant = Spree::Variant.find_by product_id: product.id
populator.populate({ products: { product_id: product.id, variant_id: variant.id }, quantity: 1 })
end
end
end
redirect_to main_path
end
end
我从Spree source逐字逐句地提取代码。创建订单并且order.products方法有效。但是,当我在管理界面中查看订单时,有一个价格,但没有产品。如果我通过管理界面添加产品,那么它会显示计数,包括以编程方式添加的计数。
如果我通过管理界面完成订单,则所有产品都会显示在已完成的订单中。
答案 0 :(得分:0)
我认为你不应该从订单的角度来看待这个问题。而是从航运方面来看。无论shippping参数如何,用户仍然只有一个订单。每个订单都有付款,结账状态机旨在接受订单到完整状态。
创建多个订单将是一个令人头疼的问题,因为那时您还必须将付款和发货以及其他部分分开。我建议查看货件逻辑以及如何拆分和修改一个订单的货件。通过这种方式,用户只需支付一次,只有一个订单和一个收据,并且您不会使订单混乱,并且可以通过艰难的战斗来获得订单以执行他们不打算做的事情。您可以在此处找到送货简介:http://guides.spreecommerce.com/developer/shipments.html
特别是关于拆分货物的部分,但其余部分也是一本很好的读物。