gpt4 book ai didi

checkout - spree 结账 - 删除步骤

转载 作者:行者123 更新时间:2023-12-01 07:05:05 25 4
gpt4 key购买 nike

我正在尝试删除 2 个结帐步骤。
我试图遵循站点中的文档http://guides.spreecommerce.com/checkout.html
但仍然没有任何 react 。

我在用
spree 1.1.2
ruby 1.9.2p318
导轨 3.2.6
Ubuntu 12.04(精确)32 位

我会告诉你我做了什么,你会告诉我要修复什么。
我应该更改文件的名称或位置吗?
还是我也应该更改其他文件?
我该如何调试它?

我创建了一个新文件“app/models/spree/order_decorator.rb”(也在“app/models/order_decorator.rb”下尝试过)

module SpreeCustomExtension

class Engine < Rails::Engine

def self.activate

Spree::Order.class_eval do



StateMachine::Machine.ignore_method_conflicts = true # I HAVE ADDED THOSE 2 LINES LATER, HOPING IT WOULD HELP ME,

Spree::Order.state_machines.clear # IT DIDN'T.



# customize the checkout state machine

Order.state_machines[:state] = StateMachine::Machine.new(Order, :initial => 'cart') do

after_transition :to => 'complete', :do => :complete_order

before_transition :to => 'complete', :do => :process_payment

event :next do

transition :from => 'cart', :to => 'payment'

transition :from => 'payment', :to => 'complete'

end



event :cancel do

transition :to => 'canceled', :if => :allow_cancel?

end

event :return do

transition :to => 'returned', :from => 'awaiting_return'

end

event :resume do

transition :to => 'resumed', :from => 'canceled', :if => :allow_resume?

end

event :authorize_return do

transition :to => 'awaiting_return'

end



before_transition :to => 'complete' do |order|

begin

order.process_payments!

rescue Core::GatewayError

!!Spree::Config[:allow_checkout_on_gateway_error]

end

end



before_transition :to => ['delivery'] do |order|

order.shipments.each { |s| s.destroy unless s.shipping_method.available_to_order?(order) }

end



after_transition :to => 'complete', :do => :finalize!

after_transition :to => 'delivery', :do => :create_tax_charge!

after_transition :to => 'payment', :do => :create_shipment!

after_transition :to => 'resumed', :do => :after_resume

after_transition :to => 'canceled', :do => :after_cancel

end



end

end

end

end

然后我用不同的代码尝试了同一个文件,仍然没有发生任何事情
Spree::Order.class_eval do 



StateMachine::Machine.ignore_method_conflicts = true

Spree::Order.state_machines.clear



state_machine :initial => 'cart', :use_transactions => false do



event :next do

transition :from => 'cart', :to => 'payment', :if => :payment_required?

transition :from => 'cart', :to => 'complete'

transition :from => 'confirm', :to => 'complete'



# note: some payment methods will not support a confirm step

transition :from => 'payment', :to => 'confirm',

:if => Proc.new { |order| order.payment_method && order.payment_method.payment_profiles_supported? }



transition :from => 'payment', :to => 'complete'

end



event :cancel do

transition :to => 'canceled', :if => :allow_cancel?

end

event :return do

transition :to => 'returned', :from => 'awaiting_return'

end

event :resume do

transition :to => 'resumed', :from => 'canceled', :if => :allow_resume?

end

event :authorize_return do

transition :to => 'awaiting_return'

end



before_transition :to => 'complete' do |order|

begin

order.process_payments!

rescue Core::GatewayError

if Spree::Config[:allow_checkout_on_gateway_error]

true

else

false

end

end

end



before_transition :to => ['delivery'] do |order|

order.shipments.each { |s| s.destroy unless s.shipping_method.available_to_order?(order) }

end



after_transition :to => 'complete', :do => :finalize!

after_transition :to => 'delivery', :do => :create_tax_charge!

after_transition :to => 'payment', :do => :create_shipment!

after_transition :to => 'resumed', :do => :after_resume

after_transition :to => 'canceled', :do => :after_cancel



end



end

最佳答案

好吧,我终于找到了——
Spree 发布了一个新版本 #1.2.0,对这个确切的问题进行了重大修复。

Spree 1.2.0 Release Notes

The checkout process has always been hard to customize within Spree, and that has generated complaints in the past. We are pleased to report in the 1.2 release of Spree that this has been substaintially easier...



所以现在的解决方案很简单 -
只需撤消您之前所有的结账操作尝试,
通过更新您的 gem 文件和捆绑安装将 spree 升级到 1.2.0,
按照他们的文档处理所有代码分解(我猜你会有一些)。
并在 app/models/spree/下创建一个简单的 order_decorator.rb
Spree::Order.class_eval do
checkout_flow do
go_to_state :address
go_to_state :payment, :if => lambda { |order| order.payment_required? }
go_to_state :confirm, :if => lambda { |order| order.confirmation_required? }
go_to_state :complete
end

# If true, causes the payment step to happen during the checkout process
def payment_required?
return false
end

# If true, causes the confirmation step to happen during the checkout process
def confirmation_required?
return true
end

end

请享用。

关于checkout - spree 结账 - 删除步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11455498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com