我正在尝试为学生制作表格参加考试(有多项选择题)。
以下是相关模型:
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#new view所做的事情:
<%= 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]"
。如果我有这个,我可以在控制器中轻松收集信息并进行必要的计算。
我正在grade_controller上查看,因为成绩最终会被创建,但问题和答案会嵌套在考试模型下,这让我对这个表单/操作应该驻留的位置感到有些困惑。我是否可以对take_exam
进行exams_controller
操作并处理从那里创建成绩?
答案 0 :(得分:0)
好的,所以我的问题是双重的:
1。)在我的radio_buttons
输入中,我错误地使用了来自f
来自form_for
的{{1}}变量而不是builder
2.)我改变了fields_for
:
fields_for
调用<%= simple_fields_for "questions[#{question.id}]" do |builder| %>
就像我想要的那样以fields_for
格式制作所有radio_button输入的哈希值。