2014-12-14 5 views
0

사람들이 질문을 작성할 수있는 설문 조사 앱이 있습니다. 사용자가 새 질문을 만들면 응답 옵션을 제공 할 수도 있습니다. 예를 들어. 질문 : 하늘은 어떤 색입니까? 답변 옵션 : 파랑, 빨강, 자주색.레일 4 : 동일한 모델의 여러 인스턴스를 단일 양식으로 저장

지금, 단일 양식을 사용하여 질문 모델 및 옵션 모델을 만들 수 있지만 같은 양식에서 여러 옵션을 만들고 싶습니다.

사용자가 해시 배열을 제출하고 해당 배열을 반복하여 각 옵션 모델 레코드를 만들 수있는 무제한 form_tag를 만들어야합니까? 아니면 다른 방법이 있습니까?

option.rb

class Option < ActiveRecord::Base 
    belongs_to :question 
end 

question.rb

class Question < ActiveRecord::Base 
    has_many :options 
    accepts_nested_attributes_for :options    
end 

질문 컨트롤러

class QuestionsController < ApplicationController 
    def new 
    @question = Question.new 
    @question.options.build 
    end 

    def create 
    @question = Question.new(question_params) 
    if @question.save 
     redirect_to @question 
    else 
     render 'new' 
    end 
end 

private 
    def question_params 
     params.require(:question).permit(:title, :desc, options_attributes:[:id, :scope, :option, :question_id]) 
    end 
end 

_form.html.erb

<%= form_for @question do |f| %> 
    <%= f.text_field :question, class: "form-control", placeholder: "Survey Question?" %> 
    <%= f.fields_for :options do |u| %> 
     <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 1", id: "answer"%> 
     <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 2", id: "answer"%> 
     <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 3", id: "answer"%> 
    <% end %> 
<%= f.submit 'Submit', class: "btn btn-default" %> 
,
+0

nested_form을 살펴보세요. 거기에서 모두 분명해질 것입니다. – Richlewis

답변

0

그것은 당신이 대답과 같은 3 가지 옵션을 만들려고처럼 보이는, 그냥 같은에 new 조치를 업데이트해야합니다

def new 
    @question = Question.new 
    3.times { @question.options.build } 
end 

이 방법은 예상대로, 새로운 뷰는 3 가지 옵션을 렌더링 그들은 각 입력에 반복, 나는 당신이 필드에 대한 ids 필요하지 않습니다 있으리라 믿고있어

<%= form_for @question do |f| %> 
    <%= f.text_field :question, class: "form-control", placeholder: "Survey Question?" %> 
    <%= f.fields_for :options do |u| %> 
    <%= u.text_field :option, class: "form-control", placeholder: "Answer Option" %> 
    <% end %> 
    <%= f.submit 'Submit', class: "btn btn-default" %> 
<% end %> 

:하지만 당신은 약간 너무 같은 _form.html.erb 파일을 변경 해야합니다 ,하지만 난 당신이 동적으로이 필요한 경우 @Richlewis

행운에 의해 제안 또한, nested_form을 확인 ... 그것은 복사/붙여 넣기 오해에 관련이

생각!

+0

은 nested_forms a gem입니까? 귀하의 솔루션이 작동하는 동안, 나는 얼마나 많은 대답 옵션을 사용자가 만들려고하는지 모르겠다. 나는 단지 3으로 제한하고 싶지 않다. 나는 javascript가 여러 text_field_tags를 생성함으로써 주위를 돌아 다니며 작업했다. 사용자가 제출할 때, 사용자가 제출할 때 각 필드를 배열로 전달하여 여러 필드의 응답 옵션을 만듭니다. 그러나 이것은 꽤 지저분한 느낌. – thedeepfield

+0

그래, nested_form은 ryan bates의 보석이며, github을 확인하십시오. [https://github.com/ryanb/nested_form](https://github.com/ryanb/nested_form) 여기 레일 슈트가 있습니다. 시도해보십시오. [http://railscasts.com/episodes/196-nested-model-form-part-1](http://railscasts.com/episodes/196-nested-model-form-part-1), [ http://railscasts.com/episodes/197-nested-model-form-part-2] (http://railscasts.com/episodes/197-nested-model-form-part-2) ... – kurenn

관련 문제