以编程方式创建未在管理界面中显示的Spree订单商品

时间:2014-03-28 18:53:03

标签: ruby-on-rails spree

我有一个基于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方法有效。但是,当我在管理界面中查看订单时,有一个价格,但没有产品。如果我通过管理界面添加产品,那么它会显示计数,包括以编程方式添加的计数。

如果我通过管理界面完成订单,则所有产品都会显示在已完成的订单中。

1 个答案:

答案 0 :(得分:0)

我认为你不应该从订单的角度来看待这个问题。而是从航运方面来看。无论shippping参数如何,用户仍然只有一个订单。每个订单都有付款,结账状态机旨在接受订单到完整状态。

创建多个订单将是一个令人头疼的问题,因为那时您还必须将付款和发货以及其他部分分开。我建议查看货件逻辑以及如何拆分和修改一个订单的货件。通过这种方式,用户只需支付一次,只有一个订单和一个收据,并且您不会使订单混乱,并且可以通过艰难的战斗来获得订单以执行他们不打算做的事情。您可以在此处找到送货简介:http://guides.spreecommerce.com/developer/shipments.html

特别是关于拆分货物的部分,但其余部分也是一本很好的读物。