2010-02-26 5 views
6

내 신청서에 사용자개의 프로젝트가입니다. "많은 프로젝트 추가"양식을 만들고 싶습니다. 따라서 사용자개의 프로젝트을 한꺼번에 생성 할 수 있습니다.레일에 중첩 된 형식으로 기존 하위 레코드를 생략하는 방법은 무엇입니까?

가장 빠른 방법은 프로젝트 필드가 중첩되어있는 사용자 양식을 만들고 사용자 필드를 생략하는 것이 었습니다. 이렇게하면 양식이 제출 될 때 사용자가 저장되고 모든 새 프로젝트 레코드가 자동으로 생성됩니다.

그러나 기존 개의 프로젝트가 양식에 표시되기를 원하지 않습니다. (@ user.projects.build에서 생성되는 새 프로젝트의 경우 빈 필드) 만 있습니다. 기존 프로젝트 레코드를 생략하기 위해 전달할 수있는 매개 변수 또는 양식에서 변경할 수있는 매개 변수가 있습니까?

<% form_for (@user) do |f| %> 

    <% f.fields_for :project do |project_form| %> 
     <%= render :partial => 'project', :locals => {:f => project_form} %> 
    <% end %> 

    <%= add_child_link "New Project", f, :projects %> 

    <%= f.submit "save" %> 

<%end%> 

저는 Ryan Bate의 complex forms 예제를 사용하고 있습니다. 코드가 제대로 작동합니다. 나는 단지 기존 프로젝트가이 형식으로 나타나지 않도록 생략하고 싶다.

답변

7

당신은 새로 만든 기록 및 이전을 구별하는 new_record? 방법을 사용할 수 있습니다 :

<% form_for @user do |f| %> 
    <% f.fields_for :project do |project_form| %> 
     <%= render :partial => 'project', :locals => {:f => project_form} if project_form.object.new_record? %> 
    <% end %> 
    <%= add_child_link "New Project", f, :projects %> 
    <%= f.submit "save" %> 
<% end %> 
+1

그게 내가 필요로 한 것, 감사합니다. – deb

+0

감사합니다 @klew – BKSpurgeon

1

당신은 하나 개의 레코드 당신에게 빈 필드를 제공해야하는

<% f.fields_for :project, Project.new do |project_form| %> 
    <%= render :partial => 'project', :locals => {:f => project_form} %> 
    <% end %> 

을 시도 할 수 있습니다.

컨트롤러에서 당신은 새로운 레코드에 대한 필드를해야합니다 사용자와 현재 fields_for에 관한 다섯 개 개의 새로운 빈 프로젝트를 만들 것입니다 관계

5.times { @user.projects.build } 

이를위한 여러 레코드를 생성 할 수 있습니다.

+0

나는 당신의 대답은 완벽하게 말이 생각하지만 검증이 실패했을 경우 어떤 이유로 필드가 강조되지 않습니다. 폼 빌더없이 필드를 생성 할 때도 동일한 문제가 발생합니다. 감사! – deb

관련 문제