2 votes

Formulaire de modèle imbriqué - Le rendu ne fonctionne pas

Je suis nouveau dans rails et j'ai besoin d'aide pour créer un formulaire imbriqué.

J'ai ceci dans teams/_form.html.erb

<%= form_for @team do |f| %>

<div class="field">
  <%= f.label "Name" %><br />
  <%= f.text_field :name, :required => true %>
</div>

<%= f.fields_for :players do |builder| %>
    <%= render :partial => 'players_field', :f => builder %>
<% end %>

<div class="actions">
   <%= f.submit %>
</div>
<% end %>

Ce que je veux, c'est créer une liste de joueurs dans le formulaire d'équipe. Le problème est que le rendu ne fonctionne pas et que le fichier players_field.html.erb ne s'affiche pas.

<table class="table table-striped">
  <thead>
  <tr>
    <th>#</th>
    <th>Name</th>
    <th>Position</th>
  </tr>
 </thead>
 <tbody id="tableRow">
  <tr>

 </tr>
 </tbody>
</table>

TR est ajouté à la table avec js.

UPDATE :

Un autre problème apparaît maintenant :/

Voici mes js :

 var newRow = document.createElement('tr');
 newRow.innerHTML =  "<td>"+ counter +"</td>"+
                     "<%= f.text_field :name %>"+
                     "<%= f.text_field :position %>"+;
 document.getElementById("tableRow").appendChild(newRow);

Erreur :

undefined local variable or method `f' for #<#<Class:0x0000000288dd38>:0x007f77cc1226e0>

Pourquoi je ne peux pas l'ajouter ?

0voto

cdesrosiers Points 8782

Le bloc

<%= f.fields_for :players do |builder| %>
  <%= render :partial => 'players_field', :f => builder %>
<% end %>

est essentiellement une boucle à travers @team.players . Il se peut que @team n'a tout simplement pas de joueurs à parcourir en boucle. Pour afficher le formulaire pour au moins un joueur, vous pouvez changer ceci en

f.fields_for :players, @team.players.build do |builder| ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X