2009-08-04 9 views
0

J'ai un modèle nommé 'chapter' (dont les seuls attributs sont 'name' et 'course__id') qui appartient à "course" (et un cours a plusieurs chapitres). sur la vue "Afficher", j'énumère tous les chapitres de ce cours. Facile.Comment lister les instances d'un modèle et avoir un formulaire pour créer une instance dans la même vue?

Je veux ajouter un formulaire à la fin de la liste afin qu'un utilisateur puisse facilement créer un nouveau chapitre.

donc dans mon contrôleur, j'ai ajouté ceci:

@[email protected] 

et la forme sur la vue ressemble à ceci:

<% form_for([@course,@newchapter]) do |c| -%> 
    <%= c.label :name, "New Chapter" %>: <%= c.text_field :name %> 
    <%= c.submit 'Create' %> 
<% end %> 

(par souci de clarté: il est en dehors de le bloc @ course.chapters.each)

Maintenant, le problème est que @ course.chapters.size est le nombre réel de chapitres + le vide que j'ai créé dans le contrôleur.

Existe-t-il un moyen de faire défiler tous les @ course.chapters sauf le dernier (vide)? ou y a-t-il une meilleure pratique (c'est-à-dire ne pas créer @newchapter ou pas comme ça)?

grâce, Pierre

Répondre

0

Vous ne voulez pas utiliser @course.chapters.build ici parce que cela n'ajoute un chapitre vide au cours. Au lieu de cela, vous devez utiliser Chapter.new et définir l'option :course comme ceci.

@newchapter = Chapter.new(:course => @course) 

Il ne peut même pas être nécessaire de préciser :course ici en fonction de la façon dont vous utilisez @newchapter.

+0

Merci beaucoup pour votre aide rapide! le: cours n'est en effet même pas nécessaire. Je suis sûr que je l'ai essayé donc il devait y avoir quelque chose de mal. – Pierre

+0

Au sujet du temps que vous avez montré à stackoverflow, ryanb. – erik

Questions connexes