我需要一个没有付款和付款步骤的结帐流程 (在接受货到付款的商店工作,所以我只需要货到付款 地址步骤。) 我正在使用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。如果这个概念是对的那么是什么 那些方法。
答案 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上进行了测试。