2016-12-02 1 views
0

Ich bin generell neu bei Rails, habe aber ein gutes Verständnis von MVC-Architektur.Rails - Sind das Speichern von Parametern in Sitzungen eine allgemein gute Idee für mehrstufige Formulare?

Mit einem Multistep-Formular habe ich meine Parameter in meine Sitzung gespeichert und am Ende des mehrstufigen Formulars die Werte aus der Sitzung abgerufen und in meine Datenbank gespeichert. Ich möchte die Daten am Ende des Mehrschrittes speichern, nicht während der gesamten Reise.

Ein Beispiel: -

Form 1-Controller

session[:user_details] = params 

Form 2-Controller

@orders = Order.new 
@orders.first_name = session[:user_details]['first_name'] 
@orders.last_name = session[:user_details]['last_name'] 
@orders.save! 

Ist dieser Ansatz die beste Methode, um das Szenario gegeben, oder gibt es eine alternative Methode in Ruby Was wäre klarer?

+1

Ich weiß nicht, ob die beste Lösung Sitzung speichern in ist, aber ich Ihnen dieses Juwel teilen [ böse] (https://github.com/schneems/wicked) – inye

+0

Danke Inye, ich werde dieses Juwel auschecken! – Adam

Antwort

2

Ein alternativer Ansatz besteht darin, Teilupdates zu verwenden. Anstatt den Checkout-Prozess als den Aufbau einer großen POST-Anfrage zu behandeln, können Sie die Bestellung frühzeitig erstellen und jeden weiteren Schritt im Prozess als PATCH-Anfrage behandeln, die die Bestellung mit weiteren Details wie Adressen oder Zahlungsdetails aktualisiert.

Ein weiterer Ansatz ist Assoziationen zu verwenden und einen Controller verwendet für CRUDing die separaten Teile einer Bestellung:

POST /order 
-> GET /order/1/addresses/new 
POST /order/addresses 
-> GET /order/1/payments/new 
POST /order/payments 
-> GET /order/1/confirmation 
+0

Das wäre ein interessanter Ansatz Max, Wenn der Benutzer aus der Kaufabwicklung fällt, würden Sie nur einen Cron verwenden, um den Benutzer zu löschen .... Oder würden Sie nur den Benutzer als unvollständiger Benutzer auf der Reise speichern? – Adam

+0

Ich würde einen Cron verwenden. Als Teil dieses Ansatzes möchten Sie Ihren Modellen eine Art von Statushaltern hinzufügen, z. B. Enum-Spalten oder sogar vollständige Zustandsautomaten. – max

+0

Der größte Vorteil hier ist, dass jede Komponente nur einen Job macht, anstatt alles in eine Monster-Controller-Aktion zu mogeln. – max

0

Ich denke, es ist gute Ansatz, aber Sie müssen daran denken, Sitzung zu löschen, wenn Benutzer das neue Formular erneut eingeben. Ein anderer Ansatz besteht darin, "vorherige Form" zu verbergen und "nächste Form" über Javascript anzuzeigen. Tatsächlich sind alle vorherigen Felder in versteckten Feldern statt in der Sitzung gespeichert, und Sie haben nur ein Formular, Sie verstecken nur bestimmte Abschnitte, damit der Benutzer denkt, dass er im nächsten Schritt ist. Im letzten Schritt geben Sie das Formular ein und bearbeiten es wie das Standard-One-Step-Formular.

+0

Dank Dziamber, ich dachte über einen Javascript-Ansatz, um die Formulare zu zeigen und zu verstecken, dachte ich, es könnte eine bessere UX-Ansatz für den Benutzer besser sein, wenn die Form vorlegt, könnte eine große Menge an Fehlern, die nicht handhabbar sein könnte . – Adam

Verwandte Themen