2012-11-03 3 views
2

레일이 새롭고 중첩 된 양식을 만드는 데 도움이 필요합니다.중첩 모델 양식 - 렌더링이 작동하지 않습니다.

나는 팀/_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 %> 

내가 원하는 것은 팀 형태로 플레이어의 목록을 만드는 것입니다이 있습니다. 문제는 렌더링이 작동하지 않으며 players_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> 

TR가 js를 사용하여 테이블에 추가됩니다.

UPDATE :

또 다른 문제는 이제 나타납니다/

이 내 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

으로 바꿀 수 있습니다. 'players_field.html.erb'는 렌더링되지 않습니다. 파일의 이름은'_players_field.html.erb'이어야합니다. – deefour

+0

네, 깜빡했는데 내 파일의 이름이 잘 지어졌습니다 _players_field.html.erb – jony17

+0

@ jony17 여기에 몇 가지 문제가 있습니다. 먼저 부분 데이터를 전달할 때 players_field ', : locals => {: f => builder} %>'또는'<% = render'players_field ' , : f => 작성자 %>'. 둘째, 당신은 자바 스크립트 내에서 루비 코드를 실행할 수 없습니다. '<% = f.text_field : name %>'문자열은 클라이언트 측에서 실행되지 않습니다 (js 만 실행됩니다). 서버 측에서 수행해야합니다. – cdesrosiers

답변

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| ... 
+0

고마워,이 내 문제를 해결;) – jony17

관련 문제