J'utilise Spree Commerce pour ma boutique en ligne. Je souhaite modifier un comportement pendant le processus de paiement, qui est défini dans Le problème est que mes modifications ne sont pas chargées. Et un autre problème est que tout à l'intérieur du module est à l'intérieur d'une méthode, la méthode le fichier d'origine app / modèles / serre / ordre / checkout.rb code> à l'intérieur de la gemme de la virée. J'ai donc fait un
checkout_decorator.rb code> au même point de mon application.
def. def.fr (klass) code> méthode. Je pense donc que je dois remplacer le fichier entier, au lieu d'une seule méthode. Voici ce que mon décorateur ressemble à: p>
checkout_decorator.rb code> p>
checkout.rb de la gemme Spree ressemble à ceci: P>
module Spree
class Order < ActiveRecord::Base
module Checkout
def self.included(klass)
klass.class_eval do
class_attribute :next_event_transitions
class_attribute :previous_states
class_attribute :checkout_flow
class_attribute :checkout_steps
def self.checkout_flow(&block)
if block_given?
@checkout_flow = block
define_state_machine!
else
@checkout_flow
end
end
def self.define_state_machine!
# some code
end
# and other methods that are not shown here
end
end
end
end
end
3 Réponses :
La méthode Module_Eval ne fonctionne pas pour vous. P>
La liste de noms n'est pas correcte. p>
Essayez Spree :: Commerce :: Checkout.class_eval Do Code> P>
TL; DR: Ecraser la méthode que vous voulez dans la Spree :: Classe d'ordre au lieu de la SPARE :: Commandez :: Checkout Module.
Vous avez mentionné que dans le fichier d'origine (SPREE_CORE-3.2.0.RC3 / App / Modèles / Spree / Commander / Checkout.RB) Un procédé enveloppe le module entier. p> Cette méthode est appelée lorsque le module est inclus dans une classe et fait son propre de sorte que puist (SPREE_CORE-3.2.0.RC3 / APP / MODÈLES / SPARE / COMMANDE.RB) a cette ligne: P> class_eval code> pour ajouter les méthodes du module aux instances de la classe. y compris cela. p>
include Spree::Order::Checkout