我是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>
为什么我不能添加这个?
答案 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| ...