2014-12-14 1 views
0

У меня есть приложение для опроса, которое позволяет людям создавать вопросы. Когда пользователь создает новый вопрос, он также может предоставить варианты ответа. Для примера. Вопрос: Какого цвета небо? Опции ответа: синий, красный, фиолетовый.Rails 4: Сохранение нескольких экземпляров одной модели в одной форме

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

Должен ли я создать неограниченный form_tag, который позволяет пользователю отправлять массив хэшей и перебирать этот массив для создания каждой записи модели параметров? Или есть другой способ сделать это?

option.rb

class Option < ActiveRecord::Base 
    belongs_to :question 
end 

question.rb

class Question < ActiveRecord::Base 
    has_many :options 
    accepts_nested_attributes_for :options    
end 

Вопросы Контроллер

class QuestionsController < ApplicationController 
    def new 
    @question = Question.new 
    @question.options.build 
    end 

    def create 
    @question = Question.new(question_params) 
    if @question.save 
     redirect_to @question 
    else 
     render 'new' 
    end 
end 

private 
    def question_params 
     params.require(:question).permit(:title, :desc, options_attributes:[:id, :scope, :option, :question_id]) 
    end 
end 

_form.html.erb

<%= form_for @question do |f| %> 
    <%= f.text_field :question, class: "form-control", placeholder: "Survey Question?" %> 
    <%= f.fields_for :options do |u| %> 
     <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 1", id: "answer"%> 
     <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 2", id: "answer"%> 
     <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 3", id: "answer"%> 
    <% end %> 
<%= f.submit 'Submit', class: "btn btn-default" %> 
+0

посмотрите на nested_form, все станет ясно оттуда – Richlewis

ответ

0

Похоже, что вы пытаетесь создать 3 варианта, как ответы, вам просто нужно обновить new действие на что-то вроде:

def new 
    @question = Question.new 
    3.times { @question.options.build } 
end 

Таким образом, новый вид сделает 3 варианта, как можно было бы ожидать , но вам придется немного изменить _form.html.erb файл как так:

<%= form_for @question do |f| %> 
    <%= f.text_field :question, class: "form-control", placeholder: "Survey Question?" %> 
    <%= f.fields_for :options do |u| %> 
    <%= u.text_field :option, class: "form-control", placeholder: "Answer Option" %> 
    <% end %> 
    <%= f.submit 'Submit', class: "btn btn-default" %> 
<% end %> 

Я предполагаю, что вы не будете нуждаться в ids для полей, так как они были повторены на каждом входе , Но я думаю, что это связано с копирования/вставки недоразумению ...

Кроме того, если вам это нужно, чтобы быть динамически, проверьте nested_form как предложено @Richlewis

Удачи!

+0

- это nested_forms драгоценный камень? Хотя ваше решение работает, я не знаю, сколько вариантов ответа пользователь собирается создать, и я не хочу ограничиваться только 3. Я работал вокруг, создав javascript несколько text_field_tags. Когда пользователь отправляет, когда пользователь отправляет, я передаю каждое поле, как массив, перебирает его, чтобы создать несколько вариантов ответа. Однако это кажется довольно грязным. – thedeepfield

+0

Да, nested_form - это драгоценный камень от rayan bates, проверьте его github, [https://github.com/ryanb/nested_form](https://github.com/ryanb/nested_form), и вот вам railscasts попробуйте [http://railscasts.com/episodes/196-nested-model-form-part-1](http://railscasts.com/episodes/196-nested-model-form-part-1), [ http://railscasts.com/episodes/197-nested-model-form-part-2] (http://railscasts.com/episodes/197-nested-model-form-part-2) ... – kurenn

 Смежные вопросы

  • Нет связанных вопросов^_^