2016-12-09 5 views
0

noobの質問/不適切な書式設定のために事前にお詫び申し上げます。私の最初の投稿です。私は明確に説明しようとします。私のアプリでは、2つのオブジェクトquizquiz_questionがあります。Railsの更新により、毎回新しいオブジェクトが作成されます

10の質問がありますが、1ページに1つの長いフォームではなく10のページに作成したいクイズを作成します。私は、クイズのオブジェクトを更新しようとしていますが、更新方法が呼び出しているとき、それは再びすべての質問を追加して、そのオブジェクトの数が急激に1を増加させ、3、7など

quizは、多くのquiz questions

これを持っています私のコントローラである:

def new 
    @quiz = Quiz.new 
    1.times{@quiz.quiz_questions.new} 
end 

def create 
    # return render json:params 
    @quiz = Quiz.new(quiz_params) 
    respond_to do |format| 
    if @quiz.save 
     format.html{ redirect_to edit_quiz_path(@quiz.id)} 
    else 
     format.html{ render :new} 
    end 
    end 
end 

def edit 
    # return render json:params 
    @quiz = Quiz.find params[:id] 
    1.times{@quiz.quiz_questions.new} 
end 

def update 
    #return render json:params 
    @quiz = Quiz.find params[:id] 
    @quiz.update(quiz_params) 
    respond_to do |format| 
    if @quiz.save && @quiz.quiz_questions.count < 10 
     format.html{ redirect_to edit_quiz_path(@quiz.id)} 
    elsif @quiz.save && @quiz.quiz_questions.count > 10 
     format.html{ redirect_to dashboard_teachers_path, notice: "Quiz Created Successfully"} 
    else 
     format.html{ render :edit} 
    end 
    end 
end 

そして、これは

<%= simple_form_for(@quiz, :defaults => { :input_html => { :class => "hello" } }) do |f| %> 
<%= f.error_notification %> 

<%= f.simple_fields_for :quiz_questions do |builder| %> 
<p><%= builder.input :question %></p> 
<p><%= builder.input :correct_answer %></p> 
<p><%= builder.input :incorrect_answer1 %></p> 
<p><%= builder.input :incorrect_answer2 %></p> 
<p><%= builder.input :incorrect_answer3 %></p> 
<% end %> 

<%= f.button :submit, class: "btn btn-default" %> 
<% end %> 
</div> 
</div> 
</div> 
</div> 
</div> 


<script type="text/javascript"> 
$(window).load(function() { 
    $('input[type=text], textarea').each(function() { 
     // Cache pointer to selected dom element. 
     // Don't need to parse entire html each time you need that. 
     var input = $(this); 

     // .val() will return empty string if there is no value 
     // 0 means false in this case don't need to use equality check 
     if (!input.val()) { 
     input.parent().css("display", "block"); 
     } else { 
     input.parent().css("display", "none"); 
     } 
    }); 

}) 
</script> 

EDIT私の編集ビューである:明確にするために。新しいquiz_questionオブジェクトを追加し、それをquizオブジェクトに割り当てるたびに、編集アクションを10回進める必要があります。

+0

私はあなたが代わりに '' PUT'または 'PATCH'のPOST'コールを作っていると思います。 POSTは新しいレコードを作成し、PUTとPATCHは既存のレコードを更新します。 – aks

+0

あなたの答えをありがとうが、これは機能しませんでした。私は私が何をしようとしているのか明確に説明しなかったと思う。私は、私が助けてくれることを望む明確な編集を加えました。 –

+0

あなたは何をしたいのか分かりませんが、質問を作成したいだけなら、 '@ quiz'のフォームを作ることはできません。それが提出されるたびに、新しいQuizオブジェクトが作成されます。 –

答えて

0

あなたは更新アクションを呼び出したい場合、あなたはPUTを使用する必要があります。

<%= simple_form_for(@quiz, :method => :put, :defaults => { :input_html => { :class => "hello" } }) do |f| %> 
+0

あなたの答えをありがとうが、これはうまくいかなかった。私は私が何をしようとしているのか明確に説明しなかったと思う。私は、私が助けてくれることを望む明確な編集を加えました。 –

関連する問題