У меня есть quiz
, который has_many
questions
который has_many
answers
. Ответы 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 %>
hm. Я изменил разрешение на 'params.require (: quiz) .permit (: name, questions_attributes: [: content,: quiz_id,: explain,: passage, answers_attributes: [: content,: question_id,: correct_answer]])' но проблема все еще сохраняется. –
Вам необходимо разрешить: поле id следующим образом: https://gist.github.com/ad795fa119044678fb504a5694a7ef32 – iosadchii