Je suis débutant mais je pense que je peux t'aider.
Dans l’exemple que je te propose, tu dois d’abord valider l’entête d’une commande dans un premier formulaire, avant de passer à la saisie de lignes de commande, dans un second formulaire.
L’entête et les lignes seront enregistrées ensembles dans des tables ‘commandes’ et ‘lignes’ de la BDD, une fois validées.
Pour valider ton premier formulaire, tu récupère d’abord dans une table ‘sessions’ ton entête (objet ‘commande’).
session[:commande] = params[:commande]
Tu appelle ensuite la méthode suivante qui lance valid?( ) sur l’objet ‘@commande’ ; ce qui déclanche les tests ‘validates …’ que tu as défini dans ton fichier commande.rb, mais ce qui n’enregistre pas ton objet dans la base de données.
1 2 3 4 5 6 7 8 9
|
def validation_entete
@commande = Commande.new(session[:commande])
if @commande.valid?()
return true
else
return false
end
end |
Si la validation est OK, tu bloque en écriture (ou tu n’affiche pas) ton formulaire d’entête et tu affiche ton formulaire de saisie de lignes de commande.
Si la validation n’est pas bonne :
- tu récupères ton entête dans session[:commande] ;
- tu réaffiche ton formulaire d’entête.
Pour afficher le message d’erreur défini dans l’instruction ‘validates …’ du fichier commande.rb, le formulaire doit contenir l’instruction suivante :
<%= error_messages_for 'commande' %>
REMARQUE : Dans cet exemple, j’ai considéré deux modèles correspondant à deux tables, mais si tu n’as qu’une table, rien ne t’empêche de créer deux modèles (un par formulaire), que tu recopie ensuite dans un seul modèle correspondant à ta table.
Partager