Создание нескольких записей во вложенной форме - PullRequest
2 голосов
/ 27 июня 2011

Я создаю приложение для опроса, и часть этого приложения имеет две модели:

#ResponseSet 
has_many :responses
accepts_nested_attributes_for :responses

#Response 
belongs_to :response_set
belongs_to :answer

Например, у вас может быть опрос с вопросом с несколькими вариантами ответов, где вы можете выбрать несколько ответов (ЧтоКакие у вас есть домашние животные? Собака, кошка, лошадь).

Что должно произойти, так это то, что когда вы отправляете свои ответы на опрос, запись добавляется в таблицу Response для каждого ответа.Поэтому, если вы выбрали, что у вас есть собака, кошка и лошадь, будут добавлены 3 записи, каждая из которых ссылается на модель Answer через :answer_id.

Я могу сделать это для вопросов с одним ответом, ноодин с несколькими ответами ломает мне голову.

Это становится более сложным, потому что в одном опросе может быть несколько вопросов, каждый с несколькими ответами.

Для справки, текущие имена полей формы выглядят так:

response_set[responses_attributes][0][answer_id]
response_set[responses_attributes][1][answer_id]
response_set[responses_attributes][2][answer_id]

Генерируется следующим образом:

<%= form_for @response_set, :url => complete_survey_path do |f| %>
  <%= f.fields_for :responses do |response| %>
    <%= response.check_box :answer_id %>
  <% end %>
<% end %>

Таким образом, это будет поле для answer_id в атрибутах response_atributes для 3 различных вопросов.

1 Ответ

1 голос
/ 04 июля 2011

Мне кажется, что проблема немного нечеткая, если я не вижу ассоциаций для Answer, кода для действия create и полностью сгенерированного HTML, но я считаю, эта статья от Shelly Roche предлагает решение для вашего проблема - возможно, с некоторым рефакторингом в связи с вашей моделью (например, ResponseSet has_many: answers,: through =>: answers).

К сожалению, фрагмент, который она предоставляет для своей формы.fields_for, кажется неполным; HAML заканчивается тегом break, но в HTML бит ключа (скрытое поле ввода, которое идентифицирует атрибут, связанный с флажком) следует после тега break.

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

Но я бы держал пари, что Шелли Роше будет готова завершить отрывки для вас, если вы захотите прокомментировать ее сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...