2

我需要一个没有送货和付款步骤的结帐流程(在接受货到付款的商店工作,所以我只需要地址步骤。)我使用的是Spree 0.10.2

我尝试过的事情:在site_extension.rb添加了以下状态机

Checkout.state_machines[:state] = StateMachine::Machine.new(Checkout, :initial => 'address') do 
      after_transition :to => 'complete', :do => :complete_order 
      before_transition :to => 'complete', :do => :process_payment 
      event :next do 
        transition :to => 'complete', :from => 'address' 
      end 
    end 

删除了不需要的步骤(至少在视觉上),但是当我提交地址时,它会引发以下错误。

CheckoutsController#update "payment" 中的 IndexError 是无效名称

稍后查看跟踪和几个类似的错误,我决定盲目地覆盖 site_extension.rb 中 checkouts_controller.rb 中的两个方法,什么都不做(因为我认为它们处理付款)

 def clear_payments_if_in_payment_state 
 end

 def object_params 
 end

这样做会在交货和帐单地址的所有字段上引发验证错误。我隐约有一个想法,我需要重写 checkouts_controller.rb 中的几个方法。如果这个概念是正确的,那么这些方法是什么。

4

2 回答 2

1

抱歉,我真的帮不了你:使用 Spree 0.10.2 自定义结帐流程简直是一场噩梦。但我建议切换到 Spree 的更新版本,例如1.3-stable。如果你切换到那个,它就像使用以下代码创建一个order_decorator.rb文件一样简单:your_app_folder/app/models/spree

Spree::Order.class_eval do
  remove_checkout_step :delivery 
  remove_checkout_step :payment
end
于 2013-08-26T14:52:08.810 回答
1

你需要 :

1)去掉paymenttransition和delivery状态转换步骤。

2) 还覆盖了 payment_required 方法。

3)这些步骤需要在app/models/spree目录下的order_decorator.rb中。

checkout_flow do
    go_to_state :address
   # go_to_state :payment
    go_to_state :complete
    remove_transition :from => :delivery, :to => :confirm
    remove_transition :from => :delivery, :to => :confirm
    remove_transition :from => :payment, :to => :confirm
  end
  #Spree::Order.state_machine.before_transition :to => :payment, :do => :set_order

  def set_order
    self.create_proposed_shipments
  end
  def require_email
    return false
  end
  def payment_required?
    false
  end

我已经在带有 rails 3.2.14 的 spree 2-0-stable 上对此进行了测试。

于 2013-08-30T14:10:33.220 回答