У меня есть приложение, в котором есть список вопросов в файле yaml.Некоторые вопросы будут иметь подвопросы.Таким образом, вопрос 20 может иметь 3 дополнительных вопроса, связанных с ним.Я создал модель ответа и модель SubAnswer с ассоциацией has_many и own_to.Я также позволил вложенным ответам быть вложенными атрибутами для модели ответа
class SubAnswer < ApplicationRecord
belongs_to :answer
class Answer < ApplicationRecord
has_many :sub_answers
accepts_nested_attributes_for :sub_answers
В некоторых вопросах может быть от 0 или до 5 подвопросов.Я пытаюсь динамически предварительно заполнить вложенные поля, но мне было трудно это выяснить.
мое действие контроллера выглядит следующим образом
def form_page
@question = Question.find_question_in_file(params[:question_index].to_i)
@answer = Answer.new
@category_questions_count = SurveyQuestion.questions_by_category(@question.gr_stream.downcase)
@question_category = @question.gr_stream
end
def answer_params
params.require(:answer).permit(:question_index, :answer_text, :survey_id, :answer_boolean, sub_answers_attributes: [:id, :question_index, :answer_text, :answer_boolean])
end
Мое действие создания - это просто печать параметров вмой терминал.
def create
p params
end
И мой раздел nested_fields в моей форме выглядит следующим образом
<% @question.sub_questions.each_with_index do |q, index| %>
<%= f.fields_for @answer.sub_answers.build do |s| %>
<p><strong>Q <%= @question.question_index %>.<%= index+1 %></strong></p>
<p><strong><%= q[1]['question'] %></strong></p>
<% if q[1]['form_fields']['boolean_field'] %>
<div class="field">
<div style="display:flex;">
<%= s.label 'Yes or No' %>
<%= s.check_box :answer_boolean, {}, true, false %> <br />
</div>
</div>
<% end %>
<% if q[1]['form_fields']['text_field'] %>
<div class="field">
<%= s.text_area :answer_text %> <br />
</div>
<% end %>
<% end %>
<% end %>
Я пытался перебрать каждый подвопрос и создать раздел fields_for.Каждый раз, когда я отправляю форму, основной ответ и последний дополнительный вопрос сохраняются.Если у меня есть 3 подвопроса, сохранится только последний.Ценю любую помощь по этому вопросу.