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#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 %>

これにより、(ほとんどの場合、とにかく)正しく見えるフォームが生成されますが、ラジオボタンはすべて1つのセットの一部です。1つの質問の回答を選択すると、同じセットの一部であるため、他のすべての質問から回答の選択が解除されます。生成された適切な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

さて、私の問題は2つありました。

1.)入力で、呼び出しからではなく、からの変数radio_buttonsを誤って使用しました。2.)次のように変更しました。fform_forbuilderfields_forfields_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 に答える