2010-11-23 10 views
0

J'ai une application simple pour calculer un devis pour un travail de cadrage. L'utilisateur entre toutes les données dans un formulaire, puis l'application calcule le devis en fonction de ces données.Ruby on Rails - Créer une commande à partir d'un devis

L'utilisateur doit alors indiquer s'il souhaite créer une commande à partir de ce devis, s'il sélectionne ou entre un nouveau client pour associer cette commande et que l'application crée la commande. Quelle est la meilleure façon de faire cela dans Ruby on Rails, dois-je stocker les données de formulaire dans une session et ensuite utiliser cette session pour créer la commande si l'utilisateur décide de créer une commande à partir de la citation?

Voici le schéma correspondant:

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 

Répondre

1

Je ne créerais aucun objet du devis.

Je créerais une action différente pour calculer la citation, puis j'utiliserais probablement ajax pour l'appeler chaque fois que la valeur d'un champ de formulaire change. Un bouton séparé et une action séparée créeraient l'ordre directement sur le formulaire.

0

Ne pas utiliser la session pour autre chose que ce qui utilisateur est connecté au moment d'un navigateur donné. Pensez à la session comme une commodité, mais ne l'utilisez pas pour quelque chose de critique, ce serait vraiment important si elle s'est perdue. De plus, gardez à l'esprit que les rails sont sans état, c'est-à-dire qu'ils ne portent rien en mémoire d'une requête à l'autre.

Je voudrais juste faire un formulaire pour faire un ordre sur la page qui montre les données de devis, et bourrer les champs pertinents avec les données de la citation, comme combien il est, quel article de commande est impliqué, ou tout .

0

La méthode préférée pour stocker des données de session dans RoR est dans un magasin de cookies. Le magasin de cookies n'est pas très grand. Pour cette raison, vous ne voudrez probablement pas essayer de stocker beaucoup de données dans la session.

Pensez à autoriser customer_id sur les commandes à être nul. Ensuite, vous pouvez stocker dans le cookie un hachage comme ": order_id =>". Cela vous permet de vous souvenir de ce que l'utilisateur anonyme a sélectionné, même s'il quitte le site et revient. C'est aussi génial pour être en mesure de mesurer votre taux d'attrition au cours du processus d'inscription (combien de personnes ont obtenu un devis, puis ne sont jamais revenus).

Le défi de ne pas stocker cette information dans la base de données est qu'elle pourrait permettre à l'utilisateur de manipuler ces données après leur saisie. Ce serait mauvais si vous leur avez cité un prix et l'a laissé sur la page.

+0

Cette approche entraînerait sûrement un élément de commande orphelin dans la base de données? – freshest

+0

Oui, mais est-ce important? Vous obtenez en échange des informations puissantes sur votre entonnoir. Connaître votre taux d'attrition (combien de personnes créent une commande et repartir avant de l'acheter) est une information très précieuse du point de vue de l'analyse commerciale. De plus, si vous êtes préoccupé par beaucoup de cruft dans votre base de données, exécutez simplement un nettoyeur qui supprime les anciens orphelins. –