2010-11-23 9 views
0

Ich habe eine einfache Anwendung, um ein Angebot für einen Bilderrahmen Job zu berechnen. Der Benutzer gibt alle Daten in ein Formular ein, und dann berechnet die Anwendung das Angebot basierend auf diesen Daten.Ruby on Rails - Erstellen Sie eine Bestellung aus einem Angebot

Der Benutzer wird dann gefragt, ob er einen Auftrag aus diesem Angebot erstellen möchte. Wenn dies der Fall ist, wählt der Benutzer einen neuen Kunden aus oder gibt einen neuen Kunden ein, um diesen Auftrag zu verknüpfen, und die Anwendung erstellt den Auftrag.

Was ist der beste Weg, dies in Ruby on Rails zu tun, speichere ich die Formulardaten in einer Sitzung und dann diese Sitzung verwenden, um den Auftrag zu erstellen, wenn der Benutzer entscheidet, eine Bestellung aus dem Angebot zu erstellen?

Hier ist das das entsprechende Schema:

create_table "orders", :force => true do |t| 
    t.string "status" 
    t.integer "customer_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

create_table "order_items", :force => true do |t| 
    t.integer "order_id" 
    t.integer "height" 
    t.integer "width" 
    t.string "mount" 
    t.integer "mount_width" 
    t.string "moulding_1" 
    t.string "moulding_2" 
    t.string "moulding_3" 
    t.boolean "glass" 
    t.boolean "backing_board" 
end 

create_table "customers", :force => true do |t| 
    t.string "name" 
    t.string "address" 
    t.string "tel_number" 
    t.string "email_address" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

Antwort

1

Ich würde überhaupt kein Objekt aus dem Zitat erstellen.

Ich würde eine andere Aktion für die Berechnung des Angebots erstellen und dann wahrscheinlich verwenden Ajax, um jedes Mal, wenn einige Formularfeld Wert geändert. Eine separate Schaltfläche und eine separate Aktion würden direkt aus dem Formular eine Bestellung erstellen.

0

Verwenden Sie die Sitzung nicht für etwas anderes als den Benutzer zur Zeit an einem bestimmten Browser angemeldet. Stellen Sie sich die Sitzung als eine Annehmlichkeit vor, aber verwenden Sie sie nicht für etwas Kritisches, das wäre wirklich wichtig, wenn es verloren geht. Denken Sie auch daran, dass Rails statuslos ist, dh von einer Anfrage zur nächsten nichts in der Erinnerung trägt.

Ich würde nur ein Formular erstellen, um eine Bestellung auf der Seite, die die Angebotsdaten zeigt, und stopfen die relevanten Felder mit den Daten aus dem Angebot, z. B. wie viel es ist, welche Bestellung Artikel beteiligt ist, oder was auch immer .

0

Die bevorzugte Methode zum Speichern von Sitzungsdaten in RoR ist in einem Cookie-Speicher. Der Cookie-Speicher ist nicht sehr groß. Aus diesem Grund möchten Sie wahrscheinlich nicht versuchen, viele Daten in der Sitzung zu speichern.

Überlegen Sie, ob customer_id auf Bestellungen nullfähig sein darf. Dann könnten Sie im Cookie-Speicher einen Hash wie ": order_id =>" speichern. Auf diese Weise können Sie sich daran erinnern, was der anonyme Benutzer ausgewählt hat, selbst wenn er die Site verlässt und zurückkehrt. Dies ist auch großartig, um Ihre Fluktuationsrate während des Anmeldeprozesses zu messen (wie viele Leute ein Angebot erhalten haben und dann nie mehr zurückkommen).

Die Herausforderung, diese Informationen nicht in der Datenbank zu speichern, besteht darin, dass der Benutzer diese Daten nach der Eingabe manipulieren kann. Das wäre schlecht, wenn Sie ihnen einen Preis zitieren und ihn auf der Seite belassen.

+0

Sicher würde dieser Ansatz verwaisten Bestellartikel in der Datenbank führen? – freshest

+0

Ja, aber ist das wichtig? Sie erhalten im Austausch mächtige Informationen über Ihren Trichter. Kenne deine Fluktuationsrate (wie viele Leute eine Bestellung erstellen und verlasse sie, bevor du sie kaufst) ist sehr wertvolle Information aus Sicht der Business-Analyse. Wenn Sie sich außerdem Sorgen um eine Menge Gruft in Ihrer Datenbank machen, dann führen Sie einfach einen Aufräumarbeiter aus, der alte Waisen so oft löscht. –