更改spree-0.10.2中的结帐流程

时间:2010-04-05 04:53:14

标签: ruby-on-rails spree

我需要一个没有付款和付款步骤的结帐流程 (在接受货到付款的商店工作,所以我只需要货到付款 地址步骤。) 我正在使用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 

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

  

IndexError in   CheckoutsController#更新       “付款”是无效的名称

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

 def clear_payments_if_in_payment_state 
 end

 def object_params 
 end

执行此操作会在所有交付字段上抛出验证错误 帐单地址。 我隐约知道我需要覆盖几种方法 来自checkouts_controller.rb。如果这个概念是对的那么是什么 那些方法。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你需要:

1)删除付款转换和交付状态转换步骤。

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在狂欢2-0-stable上进行了测试。