0

オンラインで試験用のフォームを作成しました。ユーザーが回答を選択できる質問と回答が表示され、フォームを送信できます。これは私の形式のコードです:

<%= form_tag({ controller: 'exams', action: 'check_results' }, authenticity_token: true) do %>
  <ol class="questions">
    <% @questions.each do |question| %>
  <li class="content_question"><%= kramdown question.content %></li>

  <ol class="answers">
    <% question.answers.shuffle.each do |answer| %>
      <table class="answer_contents">
        <tbody>
      <tr>
        <% if question.question_type.shorcut == 'MC' %>
          <td><%= check_box_tag "user_answer_ids[#{question.id}][]", answer.id, false, id: "user_answer_ids_#{answer.id}" %></td>
          <td><li></li></td>
          <td><%= label_tag "user_answer_ids_#{answer.id}", kramdown(answer.content) %></td>
        <% else %>
          <td><%= radio_button_tag "user_answer_ids[#{question.id}][]", answer.id, false, id: "user_answer_ids_#{answer.id}" %></td>
          <td><li></li></td>
          <td><%= label_tag "user_answer_ids_#{answer.id}", kramdown(answer.content) %></td>
        <% end %>
      </tr>
       </tbody>
      </table>
    <% end %> <%# question.answers %>
  </ol> <%# ol.answers %>
  <br>
   <% end %> <%# @questions %>
   </ol> <%# ol.questions %>
  <%= submit_tag "Finish Exam", disable_with: "Checking results...", confirm: "Are you sure?", class: "btn btn-primary" %>
<% end %> <%# form_tag %>

回答の順序をランダムにしたいので、次を使用します。

<% question.answers.shuffle.each do |answer| %>

しかし、このコードでは、ページを更新するたびに回答がランダムになります。回答を 1 回だけランダムにしたいので、ユーザーが行ったときのように質問と回答が正しい順序で後で試験を確認できるようにします。誰でもそれを行うためのアイデアや解決策を教えてもらえますか? 本当にありがとう。

私が持っているいくつかのモデル:

  • 質問には多くの答えがあります
  • 回答は質問に属します
  • 試験には多くの試験問題があります
  • 試験には多くの試験回答があります

ExamQuestionモデルは、試験問題のリスト ID を格納するために使用されます。いくつかの列があります: exam_id, question_id, topic_id, correct (boolean), sured (boolean).

ExamAnswerモデルは、ユーザーのリスト回答 ID を格納するために使用され、いくつかの列があります。exam_id, question_id, user_answer_id

4

1 に答える 1

0

あなたがそれを一度そして永遠にランダムにしたいなら:

私はあなたがこのようなもののために2つの方法があると思います:

1)ExamQuestionに新しい列を追加するには:回答のIDを含むanswers_ids(ランダムシーケンス)。タイプ:INTの配列。次に、ExamQuestionの:after_saveコールバックを定義して、質問の回答IDを順番にランダム化します。次に、回答の:after_saveおよび:after_destroyコールバックを定義します(この回答が保存(作成)および/または破棄された場合に、この回答に存在するすべてのExamQuestionsのランダムシーケンスを修正するためだけに)。

2)ExamQuestionの次のディメンション関係を作成します。ExamQuestionAnswerはExamQuestion、acts_as_list、:scope =>:exam_question_idに属します。次に、関連付けロジックを修正します。

ビューでは、選択の余地はありません。質問自体ではなく、ExamQuestionオブジェクトを繰り返します。そして、シーケンスの順序に従って回答を繰り返します。

于 2012-12-25T16:10:09.983 に答える