J'ai deux modèles: Album et Track. L'album contient de nombreuses pistes et Track appartient à l'album. Je voudrais avoir la possibilité de créer autant de pistes que nécessaire tout en créant l'album, similaire à railscasts episode 197. Contrairement à l'épisode des rails, le formulaire Piste contient à la fois un titre et une description - les deux sont obligatoires.Comment utiliser error_messages_for dans un formulaire multi-modèle?
En ce moment, la forme ressemble à ceci:
Create New Album
Name: [ ]
Track (remove link)
Name: [ ]
Description: [ ]
Track (remove link)
Name: [ ]
Description: [ ]
(add track link)
Si je décide de soumettre le formulaire vierge, je reçois des messages d'erreur suivants sur le dessus de la forme:
Description can't be blank
Title can't be blank
Title can't be blank
Ces erreurs les messages ne sont pas spécifiques au modèle, tous situés en haut de la page et apparaissent une seule fois pour chaque modèle (notez que j'ai laissé les champs à la fois vide et les messages d'erreur n'apparaissent qu'une fois - pas spécifique à quelle piste) .
Pour générer les champs de piste initiale, j'ai ajouté la ligne suivante dans la nouvelle action de mon album_controller: 2.times { @album.tracks.build }
L'essentiel de ce que ma forme ressemble est ceci:
<% form_for @album do |f| %>
<%= f.error_messages %>
<%= f.label :title %><br />
<%= f.text_field :title %>
<% f.fields_for :tracks do |f, track| %>
<%= render :partial => 'tracks/fields', :locals => {:f => f} %>
<% end %>
<%= f.submit "Submit" %>
<% end %>
J'ai essayé de remplacer le <%= f.error_messages %>
supérieur avec <%= error_messages_for @album %>
(pour afficher seulement les messages pour l'album), et en ajoutant un <%= error_messages_for track %>
(pour afficher les messages d'erreur spécifiques à chaque piste) - mais cela ne fait pas l'affaire. Est-ce que quelqu'un sait comment aborder cela?
Merci!
Non testé, mais merci beaucoup pour la réponse complète! –
Je l'ai testé sur Rails 2.3.5 et ça marche comme annoncé;) – klew