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?
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
En outre, j'ai entendu dire que stocker des objets de modèle dans la session est mauvais? – Kevin
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