@vadimstroganov

Как сделать динамическое генерирование формы взаимодействующей с разными моделями?

Здравствуйте! Прошу подсказать/направить в нужном направление как сделать такую форму.

Есть две модели Question и Answer

Соответственно в questions хранятся вопросы, а в answer - возможные варианты ответов

Я сделал форму для редактирование Question:
<%= simple_form_for @question do |f| %>
  <%= f.input :question,    :label => 'Вопрос' %>
  <%= f.input :score,         :label => 'Количество баллов' %>
  # а тут должны проявлять инпуты для ответов(ответов может быть все время разное количество) они хранятся в отдельной таблице, они связаны по id
<% end %>


Как такое реализовать? Допустим чтобы изначально появлялось одно поле для ответа, и кнопкой добавлять дополнительные поля(второе третье и тд), и как это это все в кучу собрать и отправить ?..
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 3
Jeiwan
@Jeiwan
api.rubyonrails.org/classes/ActiveRecord/NestedAtt...
api.rubyonrails.org/classes/ActionView/Helpers/For...
https://github.com/nathanvda/cocoon

Но это довольно геморройная тема, придется помучиться. Советую поискать туториалы на тему accepts_nested_attributes, fields_for. Ещё вот это видео может помочь: https://youtu.be/QhdzE1yNs-0?t=1m20s
Ответ написан
@Renius
дурак восторженный
Во первых, у вас есть свзяь вопросов и ответов, например questions has_many answers
тогда вам доступно с статическом режиме(одно поле для ответа в ваших терминах)
<%= f.fields_for :answers, @question.answers.new do |answer_fields| %>
    <%= answer_fields.text_area :text %>

Аналогично, для существующих у вопроса ответов
<%- @question.answers.each do |answer| %>
<%= f.fields_for :answers, answer do |answer_fields| %>
    <%= answer_fields.text_area :text %>
#etc


Во вторых, вам вручную нужно сконструировать форму для динамического добавления формы, если вы хотите добавить форму нового ответа к вопросу через javascript
Или сохранять текущий вопрос стандартно, и рендерить форму заново в которой будут поля для существующих ответов и поля для нового ответа

В третьих, вам нужны accepts_nested_attributes :answer_attributes для обслуживания ответов вложенных в вовпросы
Обо всем этом тут написано в общих чертах
Ответ написан
Комментировать
@jarosluv
Правильным подходом для создания форм, в которых участвуют несколько моделей, считается использование Form Objects. Предлагаю вам погуглить на эту тему, а также обратить внимание на эти два гема (при этом читайте дисклеймеры):
https://github.com/apotonick/reform
https://github.com/railsgsoc/actionform
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы