我正在尝试为学生制作一份考试表格(带有多项选择题)。
以下是相关型号:
Exam has_many :questions
has_one :grade
accepts_nested_attributes_for :questions
Question has_many :answers
accepts_nested_attributes_for :answers
Grade belongs_to :exam
belongs_to :subscription
我将 Simple_form 用于我的应用程序表单。使用fields_for 和一些javascript(如嵌套表单上的railscast 所示)完成并使用了用于进行考试的表单。现在我正在尝试制作考试表格。
唯一的输入将是每个问题的一组单选按钮。用户输入将用于计算分数,分数将是保存到 Grade 模型的唯一信息。我必须承认我不知道如何进行这项工作。到目前为止,这是我对 Grade#new 视图的了解:
<%= simple_form_for [@subscription, @grade], :html => { :class => 'form-horizontal' } do |f| %>
<fieldset>
<legend>Exam for <%= @lesson.name.capitalize %></legend>
<% @questions.each do |question| %>
<%= simple_fields_for :questions do |builder| %>
<ol>
<li>
<p><%= question.text %></p>
<%= f.input :answer, :collection => question.answers, :as => :radio_buttons %>
</li>
</ol>
<% end %>
<% end %>
<div class="form-actions">
<%= f.submit "Submit Exam", :class => "btn btn-primary" %>
<%= link_to "Cancel", lesson_exam_path(@lesson, @exam), :class=>"btn" %>
</div>
</fieldset>
<% end %>
这会生成一个看起来正确的表单(嗯,大多数情况下),但单选按钮都是一组的一部分。在一个问题上选择答案时,它将取消选择其他问题的答案,因为它们是同一集的一部分。这是生成的相关 HTML:
<input class="radio_buttons optional" id="grade_answer_31" name="grade[answer]" type="radio" value="31"/>
这里的问题当然是name=
html 属性。它指向等级。我需要它像name="grade[:question_id][:answer_id]"
. 如果我有这个,我可以很容易地在控制器中收集信息并进行必要的计算。
我正在对 Grades_controller 进行查看,因为最终将创建一个成绩,但是问题和答案嵌套在考试模型下,这让我对这个表单/操作应该放在哪里有点困惑。我是否应该对此take_exam
采取行动exams_controller
并从那里创建成绩?