Rails更新每次都会创建一个新对象

时间:2016-12-09 07:47:20

标签: ruby-on-rails ruby-on-rails-4

提前为noob问题/格式错误道歉。这是我的第一篇文章。我会尽力解释清楚。在我的应用中,我有两个对象quizquiz_question

我想创建一个测验,其中包含10个与之相关的问题,但是想要在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>

编辑:为清楚起见。我想在编辑操作中进行10次,每次添加一个新的quiz_question对象并将其分配给quiz对象。

1 个答案:

答案 0 :(得分:0)

如果要调用更新操作,则需要使用PUT

<%= simple_form_for(@quiz, :method => :put, :defaults => { :input_html => { :class => "hello" } }) do |f| %>
相关问题