0

我正在尝试为学生制作一份考试表格(带有多项选择题)。

以下是相关型号:

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并从那里创建成绩?

4

1 回答 1

0

好的,所以我的问题有两个:

1.)在我的radio_buttons输入中,我错误地使用了f变量 fromform_for而不是builder来自fields_for调用 2.)我改变fields_for如下:

<%= simple_fields_for "questions[#{question.id}]" do |builder| %>

像这样调用会以我想要fields_for的格式对所有 radio_button 输入进行哈希处理。grade[questions][:question_id][:answer_id]

于 2012-12-01T03:26:02.563 回答