Создайте много не дочерних записей в одной форме - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть форма, где мне нужно, чтобы пользователи могли создавать множество записей, за исключением того, что отличие от стандартного гема nested_form состоит в том, что я не создаю дочерние записи.Возьмем, к примеру, опрос:

Опрашивающий создает Survey, который имеет множество вложенных SurveyQuestions, каждый с некоторым количеством SurveyOptions.Затем отвечающий отвечает на SurveyAnswer.new, чтобы ответить на некоторые из этих вопросов.

Мне нужно иметь возможность создать несколько SurveyAnswers за один раз.Поскольку это создает несколько «родителей», а не «детей», это кажется нетипичной проблемой.Как мне заставить это работать?


Обновление - вопросы относятся не только к опросам

Описание, которое я написал выше, может вводить в заблуждение - рассмотрим просто Questions, к которомупользователи могут создавать Answers.Некоторые вопросы связаны в опросах, но многие вопросы находятся в свободном обращении.Вот почему я подумал, что нет смысла связывать ответы ни с чем, кроме пользователя, который их создал.

1 Ответ

0 голосов
/ 27 декабря 2011

Обновление: поскольку область видимости не является опцией - вот решение, которое должно работать:

Контроллер:

  def new
    @questions = []
    (1..10).each do
      @questions << Question.new
    end
  end
  def create
    logger.info params[:questions].inspect
  end

Вид:

<%= form_for(:questions, :url => questions_path) do |f| %>
  <% prefix ||= 0 %>
  <% @questions.each do |n| %>
    <% prefix += 1 %>
    <%= f.fields_for(prefix.to_s ) do |child| %>
      <%= child.text_field :text %>
    <% end %>
  <% end %>

  <%= submit_tag :test %>
<% end %>

Это создаст форму с несколькими дочерними элементами, которая выглядит примерно так:

<input id="questions_1_text" name="questions[1][text]" size="30" type="text" />    
<input id="questions_2_text" name="questions[2][text]" size="30" type="text" />

Хэш параметров выглядит следующим образом:

"questions" => {"1" => {"text" => "foo"}, "2" => {"text" => "bar"}, "3" => {"text" => "что-нибудь"}, "4" => {"text" => "идет"}, "5" => {"текст" => "здесь"}, "6" => {"text" => ""}, "7" => {"text" => ""}, "8" => {"text" => ""}, "9" => {"text" => ""}, "10" => {"text" => ""}}, "commit" => "test"}

Как вы можете видеть, вы можете просто получить доступ к этому хешу в вашем контроллере через params [: questions]. Вы можете просмотреть их, проверить, не пусты ли они, и сохранить их в ActiveRecord.

Надеюсь, это поможет.

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