2009-12-17 3 views
0

Je suis en train de construire une page d'inscription de l'utilisateur qui couvrira trois pages et de créer deux enregistrements, un objet utilisateur et un objet de billets:multi-page de création de compte

  • le premier (index) recueille juste un domaine résumé du problème. La seconde (signup_a) recueille la description détaillée du problème, autopopule le résumé précédent, quelques détails associés qui iront dans l'objet ticket, et le prénom/nom/email qui ira dans l'objet utilisateur
  • le troisième (signup_b) ajoute plus de détails à l'objet utilisateur tels que l'adresse, la ville, l'état, etc. mais aucun détail supplémentaire n'est ajouté à l'objet ticket, il peut donc être fermé ici.
  • La page finale (signup_c) affiche tous les détails de l'utilisateur/ticket au client et enregistre après un bouton de confirmation.

Actuellement, j'ai les méthodes dans un seul contrôleur (code simplifié sans erreur vérification ou respond_to):

def index # Collects summary 
@ticket = Ticket.new 
end 

def signup_a # Basic Ticket Info/User name and email 
    @ticket = Ticket.new(params[:ticket]) 
    @user = User.new 
end 

def signup_b # Address and other misc. pref's 
    @ticket = Ticket.new(params[:ticket]) 
    @user = User.new(params[:user]) 
end 

def signup_C#Display final results 
    @ticket = Ticket.new(params[:ticket]) 
    @user = User.new(params[:user]) 
end  

def submit_ticket #Saves info 
    @ticket = Ticket.new(params[:ticket]) 
    @ticket.save! 
    @user = User.new(params[:user]) 
    @user.save! 
end 

Le problème est ... Je ne veux pas enregistrer les informations dans le DB à chaque étape, seulement la dernière, mais les variables de chaque page avant que celles-ci ne sont pas explicitement référencées dans la page suivante ne sont pas passées. Comment puis-je continuer à ajouter aux objets Ticket et Utilisateur afin que l'info reste jusqu'à la toute dernière page où je fais une sauvegarde! ? Aussi, quand j'effectue un @ user.save! méthode ... puis-je toujours appeler les attributs individuels de l'instance ou effectuer une sauvegarde! transformer l'objet en une valeur true/false selon que l'information a été stockée?

Répondre

0

Au lieu d'enregistrer dans la base de données à chaque étape intermédiaire, enregistrez les informations publiées dans une session. Puis, lorsque vous arriverez à la fin, vous pourrez récupérer ces données de la session pour les transmettre aux constructeurs d'objets.

def submit_ticket #Saves info 
    @ticket = Ticket.new(session[:ticket]) 
    @ticket.save! 
+0

pour signup_b et c ne serait pas que je dois faire quelque chose comme session [:] << billet params [:] billet ou quelque chose? Il semblerait que cela ne ferait que remplacer l'étape précédente? – Kevin

+0

En outre, j'ai entendu dire que stocker des objets de modèle dans la session est mauvais? – Kevin

+0

Plutôt que d'écraser la session [: ticket] aux étapes "b" et "c", vous pouvez ajouter les éléments individuels de ces pages à l'objet de session existant [: ticket], à savoir "session [: ticket] [: field1] = params [: ticket] [field1] ", etc. – Legion

Questions connexes