/ / Ändern des Checkout-Flusses in Spree-0.10.2 - Ruby-on-Rails, Spree

Änderung des Checkout-Flusses in Spree-0.10.2 - Ruby-on-Schienen, Spree

Ich benötige einen Bestellvorgang ohne Liefer- und Zahlungsschritt Ich arbeite in einem Geschäft, das Nachnahme akzeptiert, also brauche ich nur die Adressschritt.) ich benutze Spree 0.10.2

Dinge, die ich versucht habe: In dem site_extension.rb fügte die folgende Zustandsmaschine hinzu

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

Die unerwünschten Schritte werden entfernt (zumindest optisch), aber wenn ich einreiche Die Adresse gibt den folgenden Fehler aus.

IndexError in CheckoutsController # Update "payment" ist ein ungültiger Name

Betrachtet man die Spur und ein paar ähnliche Fehlerspäter entscheide ich mich dafür Überschreiben Sie blind zwei Methoden von checkouts_controller.rb in site_extension.rb nichts zu tun (da sie mit der Zahlung befassen ich vermuten)

 def clear_payments_if_in_payment_state
end

def object_params
end

Dies führt zu Validierungsfehlern bei allenLiefergebiete und Rechnungsadresse. Ich habe vage eine Ahnung, dass ich ein paar Methoden überschreiben muss von checkouts_controller.rb. Wenn dieser Begriff richtig ist, was dann? diese Methoden.

Antworten:

1 für die Antwort № 1

Du brauchst :

1) Entfernen Sie den Übergangsschritt Zahlungsverkehr und Lieferstatus.

2) Überschreiben Sie auch die Methode payment_required.

3) Diese Schritte müssen sich in order_decorator.rb im Verzeichnis app / models / spree befinden.

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

Ich habe dies auf Spree 2-0-Stall mit Schienen 3.2.14 getestet.


1 für die Antwort № 2

Entschuldigung, ich kann dir nicht wirklich helfen: Das Anpassen des Checkout-Prozesses mit Spree 0.10.2 ist eine Art Albtraum. Ich würde aber empfehlen, auf eine neuere Spree-Version wie die zu wechseln 1,3-stabil. Wenn Sie zu diesem gewechselt wären, wäre es so einfach wie das Erstellen eines order_decorator.rb Datei in your_app_folder/app/models/spree mit dem folgenden Code:

Spree::Order.class_eval do
remove_checkout_step :delivery
remove_checkout_step :payment
end