2016-08-22 2 views
0

У меня есть quiz, который has_manyquestions который has_manyanswers. Ответы belongs_to Вопросы, которые belongs_to a Викторина.Вложенные разрешения, дающие мне проблемы

У меня проблема: если я попытаюсь обновить один из моих викторин, независимо от того, что я делаю, после того, как я отправлю викторину, количество вопросов (и ответов в каждом вопросе) удваивается. Это происходит, когда я пытался сделать надлежащие разрешения:

params.require(:quiz).permit(:name, questions_attributes: [:content, :explanation, :passage, answers_attributes: [:content, :correct_answer]]) 

Если я просто params.require(:quiz).permit! я не получаю эту проблему. Почему это так? Я включил форму ниже:

<%= form_for(@quiz) do |f| %> 
    <% if @quiz.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@quiz.errors.count, "error") %> prohibited this quiz from being saved:</h2> 

     <ul> 
     <% @quiz.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </div> 


    <%= f.fields_for :questions do |question_attribute| %> 
    <div class = 'inner-c'> 
    <p> 
    <%= question_attribute.label :content, "Question" %> <span><b><%= question_attribute.index + 1 %></b></span> <br/> 
    <%= question_attribute.text_area :content, :cols => 100, :rows => 4 %> 
    </p> 
    <p> 
    <%= question_attribute.label :explanation, "Answer Explanation" %> <br/> 
    <%= question_attribute.text_area :explanation, :cols => 100, :rows => 6 %> 

</p> 
    <%= question_attribute.label :_destroy, "Remove Question"%> 
    <%= question_attribute.check_box :_destroy %><br/> 

    <%= question_attribute.label :passage, "Reference Passage" %> <br/> 
    <%= question_attribute.text_area :passage, :rows => 3, :class => 'passage-input' %> 


    <%#= question_attribute.label :question_explanation, "Question Explanation" %> 
    <%#= question_attribute.text_area :question_explanation, :rows => 10 %> 


    </p> 

    <%= question_attribute.fields_for :answers do |answer_attribute| %> 
    <p> 
     <%= answer_attribute.label :content, "Answer" %> 
     <%= answer_attribute.text_field :content %> 
     <%= answer_attribute.label :correct_answer, "Check to indicate correct answer", :class => 'inline' %> 
     <%= answer_attribute.check_box :correct_answer, :class => 'inline'%> 

    </p> 
    <% end %> 

    </div> <!-- inner-c --> 
<% end %> 


    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

ответ

0

Скорее всего, новые записи создаются, потому что идентификаторы отфильтровываются. Попробуйте разрешить столбцы id для вложенных моделей

+0

hm. Я изменил разрешение на 'params.require (: quiz) .permit (: name, questions_attributes: [: content,: quiz_id,: explain,: passage, answers_attributes: [: content,: question_id,: correct_answer]])' но проблема все еще сохраняется. –

+0

Вам необходимо разрешить: поле id следующим образом: https://gist.github.com/ad795fa119044678fb504a5694a7ef32 – iosadchii

Смежные вопросы