嵌套模型表单 - 渲染不起作用

时间:2012-11-03 01:35:15

标签: ruby-on-rails nested-forms

我是rails的新手,需要一些帮助来创建嵌套表单。

我在团队中有这个/ _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 %>

我想要的是以团队形式创建一个球员列表。问题是渲染不起作用,player_field.html.erb不渲染。

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

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

使用js将TR添加到表中。

更新:

现在出现另一个问题:/

这是我的js:

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

错误:

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

为什么我不能添加这个?

1 个答案:

答案 0 :(得分:0)

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

基本上是@team.players的循环。可能是@team根本没有任何玩家循环的情况。要显示至少一个玩家的表单,您可以将其更改为

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