2013-12-11 3 views
1

저는 프로젝트 관리 응용 프로그램을 만들고 있는데, form_for으로 프로젝트를 만들고 있는데 그 안에는 fields for에서 3 명의 학생을 만들고 싶습니다.하나의 입력란에 여러 개의 텍스트 필드가 있습니다.

나는이 같은 프로젝트 내 new.html.erb을 설정 한 :

def create 
    render text: params[:project].inspect 
    end 

그래서 내가 입력 :

<h1>Creating new project</h1> 

<%= form_for :project, url: projects_path do |f| %> 
    <p> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    </p> 

    <p> 
    <%= f.label :lecturer %> 
    <%= f.text_field :lecturer %> 
    </p> 

    <p> 
     <%= f.fields_for :students do |s| %> 
      <%= s.label :name %> 
      <%= s.text_field :name %><br> 
      <%= s.label :name %> 
      <%= s.text_field :name %><br> 
      <%= s.label :name %> 
      <%= s.text_field :name %> 
     <% end %> 
    </p> 

    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 

을 그리고 내 form_for 결과를보고 하나 개의 간단한 라인을 추가 jusst create 방법 페이지의 텍스트 필드를 올리면 내 마지막 학생이이 사전에 전달 된 것을 볼 수 있듯이 {"name"=>"asd", "lecturer"=>"ffff", "students"=>{"name"=>"qeew"}}입니다.

fields_for에 여러 명의 학생을 만들려면 어떻게해야합니까? 또는 어떻게이 두 모델을 서로 작동하도록 설정할 수 있습니까? 나는 당신이 나의 관점을 얻고 내가 성취하고자하는 것을 알고 있기를 바랍니다. 다음과 같은

답변

2

당신은 당신의 컨트롤러 new 행동에 대한 필드를 가질 필요가 학생들의 수를 만들 수있다 :이 프로젝트 인스턴스에서 세 학생을 구축 할 것입니다

# app/controllers/projects_controller.rb 

def new 
    @project = Project.new 
    3.times do 
    student = @project.students.build 
    end 
end 

. 할

# app/views/projects/new.html.erb 

<%= form_for @project, url: projects_path do |f| %> 
    <p> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :lecturer %> 
    <%= f.text_field :lecturer %> 
    </p> 
    <p> 
    <%= f.fields_for :students do |s| %> 
     <%= s.label :name %> 
     <%= s.text_field :name %> 
    <% end %> 
    </p> 
    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 
+0

@rohit, 편집 해 주셔서 감사합니다. – vee

+0

문제 없습니다. 휴대 전화를 통해 편집 했으므로 구문 강조 표시가 올바르게 설정되지 않았습니다. 나는 당신이 그것을 다시 편집 한 것을 본다 :-) – Rohit

1

가장 쉬운 일이 아닌 상징의 해제를 초기화, 적절한 Project 객체를 전달하는 것입니다 : 다음과 같이

그런 다음보기의 form_for 선언을 업데이트합니다. 그런 다음 3 명의 학생을 개체에 추가하고 전체 컬렉션에 대한 필드를 수행합니다.

하면이 작업을 수행하려면 projects#new에서이 같은 일부 코드 싶어 - 형태를 통해 다음

@project = Project.new 
3.times { @project << Student.new } 

을 다음 fields_for은 자동으로 각 학생에 대한 별도의 필드를 생성합니다

form_for @project do |f| 
    ... 
    f.fields_for :students do |s| 
    s.label :name 
    s.text_field :name 
    end 
end 

그 당신은 컨트롤러의 프로젝트에 추가했습니다. 내가 대해 완전히 확실하지 않다


한 점 : 내가 생각 이 당신의 Project 모델 라인 accepts_nested_attibutes_for :students을 추가 할 필요합니다,하지만 난 아주 확실하지 않다. 이것은 컨트롤러의 생성 액션에서 학생들과 프로젝트를 아주 쉽게 만들 수 있다는 부가적인 이점을 가지고 있지만 모든 상황에서 올바른 선택이 아닙니다. 내 솔루션에 accepted_nested_attributes_for이 필요하고 원치 않는 경우 알려 주시면 비슷한 해결책으로 내 대답을 업데이트 할 수 있습니다.

관련 문제