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 № 1Du 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