Я пытаюсь сделать приложение для проверки рельсов, и у меня проблема. Я использую драгоценный камень nested_forms, и я обычно могу создавать викторины. Вот код для создания викторины:Rails приложение для викторины, получающее результаты
_form.html.erb:
<%= nested_form_for @quiz do |f| %>
<%= f.text_field :name %>
<%= f.fields_for :questions do |question_form| %>
<h5>Question</h5>
<%= question_form.text_field :question %>
<%= question_form.text_field :option1 %>
<%= question_form.radio_button :trueoption, 1 %>
<%= question_form.text_field :option2 %>
<%= question_form.radio_button :trueoption, 2 %>
<%= question_form.text_field :option3 %>
<%= question_form.radio_button :trueoption, 3 %>
<%= question_form.link_to_remove "Remove" %>
<% end %>
<%= f.link_to_add "Add a question", :questions %>
<%= f.submit "I'm Done!", class: "button" %>
<% end %>
Это отлично работает, викторины создан и сохранен. Но тогда при попытке решить викторину проблемы возникают. Когда я иду на шоу зрения викторины (например, викторины/8) Я показываю тест нормально с этим:
<%= nested_form_for @result do |f| %>
<% @quiz.questions.each do |question| %>
<%= f.fields_for question do |q| %>
<div class="panel">
<h2><%= question.question %></h2>
<h5><%= q.radio_button :trueoption, 1, id: question.id %><%= label :trueoption_option1, question.id %></h5>
<h5><%= q.radio_button :trueoption, 2, id: question.id %><%= label :trueoption_option2, question.id %></h5>
<h5><%= q.radio_button :trueoption, 3, id: question.id %><%= label :trueoption_option3, question.id %></h5>
</div>
<% end %>
<% end %>
<%= f.submit %>
<% end %>
И это показывает каждый вопрос, как правило, как и должно быть. Но что не работает, это радиокнопки; это все равно, что только один может быть проверен. В чем проблема?
Вот контроллеры:
quizzes_controller.rb:
class QuizzesController < ApplicationController
def index
@quizzes = Quiz.all
end
def new
@quiz = Quiz.new
3.times do
question = @quiz.questions.build
end
end
def create
@quiz = Quiz.create(params[:quiz])
if @quiz.save
redirect_to @quiz
else
render :action => :new
end
end
def show
@quiz = Quiz.find(params[:id])
@result = Result.new
end
end
Результаты контроллера:
class ResultsController < ApplicationController
def new
@result = Result.new
end
def create
@result = Result.create(params[:result])
if @result.save
redirect_to @result
else
render action: :new
end
end
def show
@result = Result.find(params[:id])
end
end
И модели:
Quiz.rb
class Quiz < ActiveRecord::Base
attr_accessible :name, :questions_attributes
has_many :questions
accepts_nested_attributes_for :questions, allow_destroy: true
end
Question.rb
class Question < ActiveRecord::Base
attr_accessible :option1, :option2, :option3, :trueoption, :quiz_id, :question
belongs_to :quiz
has_many :answers
end
Result.rb
class Result < ActiveRecord::Base
attr_accessible :question_id, :trueoption, :question_attributes
belongs_to :question
accepts_nested_attributes_for :question
end
Так в основном, то, что он делает это сохраняет только один результат, а не каждый по отдельности (вложенная форма), но она должна сохранить результат для каждого вопроса.
Заранее спасибо