-1

我升级我的轨道和大礼包到Rails 4.2和狂欢3.1无法覆盖大礼包模型的方法

我已经重写purchase!方法Payment模型

这是该方法是如何在大礼包

module Spree 
    class Payment < Spree::Base 
    module Processing 
     def purchase! 
     started_processing! 
     gateway_action(source, :purchase, :complete) 
     end 
    end 
    end 
end 

这是它是如何在rails 3.2覆盖(它是工作到现在)

Spree::Payment::Processing.class_eval do 
    def purchase! 
    started_processing! 
    if source.class == Spree::PurchaseOrder 
     gateway_action(source, :authorize, :pend) 
    else 
     gateway_action(source, :purchase, :complete) 
    end 
    end 
end 

但现在我得到使用Rails 4.2以下错误和狂欢3.1

/home/deepak/workspace/Project/app/models/spree/payment/processing_decorator.rb:2:in `<module:Spree>': superclass mismatch for class Payment (TypeError) 
    from /home/deepak/workspace/Project/app/models/spree/payment/processing_decorator.rb:1:in `<top (required)>' 
    from /home/deepak/.rvm/gems/ruby-2.3.1/gems/zeus-0.15.10/lib/zeus/load_tracking.rb:76:in `load' 
    from /home/deepak/.rvm/gems/ruby-2.3.1/gems/zeus-0.15.10/lib/zeus/load_tracking.rb:76:in `load' 
    from /home/deepak/.rvm/gems/ruby-2.3.1/gems/zeus-0.15.10/lib/zeus/load_tracking.rb:68:in `load' 
    from /home/deepak/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.7.1/lib/active_support/dependencies.rb:268:in `block in load' 
    from /home/deepak/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.7.1/lib/active_support/dependencies.rb:240:in `load_dependency' 
    from /home/deepak/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.7.1/lib/active_support/dependencies.rb:268:in `load' 
    from /home/deepak/workspace/Project/config/application.rb:16:in `block (2 levels) in <class:Application>' 
    from /home/deepak/workspace/Project/config/application.rb:15:in `glob' 
    from /home/deepak/workspace/Project/config/application.rb:15:in `block in <class:Application>' 
+0

只需使用原始代码将文件添加到初始化程序中,获取需要重写的方法即可。 –

+0

该模块有一些额外的方法https://github.com/spree/spree/blob/2-0-stable/core/app/models/spree/payment/processing.rb –

+0

它没关系,你只是想正确地打开类'模块Spree class Payment

回答

1
# /initializers/spree_overrides.rb 
module Spree 
    class Payment < Spree::Base 
    module Processing 
     def purchase! 
     started_processing! 
     if source.class == Spree::PurchaseOrder 
      gateway_action(source, :authorize, :pend) 
     else 
      gateway_action(source, :purchase, :complete) 
     end 
     end 
    end 
    end 
end 

有它初始化它会覆盖在狂欢中定义的原始方法。