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

但是使用此代码,每次刷新页面时答案都是随机的。我希望答案是随机的一次,所以我可以稍后查看考试,问题和答案的顺序正确,就像用户做的时候一样。任何人都可以给我一些想法或解决方案吗?非常感谢。

我有的一些模型:

  • 问题有很多答案
  • 答案属于问题
  • 考试有很多exam_questions
  • 考试有很多exam_answers

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

如果你想永远随机一次:

我认为您有两种方法可以解决这些问题:

1) 向 ExamQuestion 添加新列:answers_ids包含答案的 id(随机序列)。类型:INT 数组。然后为 ExamQuestion 定义 :after_save 回调,以将问题的答案 ID 随机化为序列。然后为答案定义 :after_save 和 :after_destroy 回调(如果它被保存(创建)和/或销毁,则只是为了纠正与该答案存在的所有 ExamQuestions 的随机序列)。

2) 为 ExamQuestion 创建下一个维度关系。ExamQuestionAnswer belongs_to ExamQuestion、acts_as_list、:scope => :exam_question_id。然后更正您的关联逻辑。

在视图中你没有选择。迭代的不是 Questions 本身,而是 ExamQuestion 对象。并根据序列顺序迭代答案。

于 2012-12-25T16:10:09.983 回答