-1

Je suis mise à niveau mes rails et Spree Rails 4.2 et Spree 3.1Impossible de passer outre une méthode dans le modèle de frénésie

j'avais overriden méthode purchase! dans Payment modèle

Voici comment la méthode est en fête

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

Voici comment il a été redéfinie dans rails 3.2 (et il travaillait jusqu'à présent)

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 

Mais maintenant, je reçois l'erreur suivante avec Rails 4.2 et Spree 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

Il suffit d'ajouter un fichier dans l'initialiseur avec le code original, en ayant la méthode dont vous avez besoin. –

+0

Le module a quelques méthodes supplémentaires https://github.com/spree/spree/blob/2-0-stable/core/app/models/spree/payment/processing.rb –

+0

ce n'est pas grave, vous voulez juste ouvrir la classe correctement 'module Spree classe Paiement

Répondre

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 

avoir dans initialiseur il remplace la méthode originale définie dans Spree.