我已经在线建立了一个表格,它显示了用户可以选择答案的问题和答案,然后他们可以提交表格。这是我的表格代码:
<%= 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| %>
但是使用此代码,每次刷新页面时答案都是随机的。我希望答案只是随机一次,所以我可以稍后查看考试,问题和答案是正确的顺序,就像用户那样。任何人都可以给我一些想法或解决方案吗?非常感谢。
我有一些型号:
ExamQuestion 模型用于存储考试问题的列表ID,它有一些列:exam_id, question_id, topic_id, correct (boolean), sured (boolean)
。
ExamAnswer 模型用于存储用户的列表答案ID,它有一些列:exam_id, question_id, user_answer_id
答案 0 :(得分:0)
如果你想永远随机一次:
我认为你有两种方法可以解决这个问题:
1)向ExamQuestion添加新列: answers_ids 包含答案的ids(随机序列)。输入:INT的ARRAY。然后定义:afterQave回调,用于ExamQuestion将问题的答案id随机化为序列。然后定义:after_save和:after_destroy回答答案(只是为了纠正所有ExamQuestions的随机序列,如果它被保存(创建)和/或销毁了这个答案)。
2)为ExamQuestion创建下一个维度关系。 ExamQuestionAnswer belongs_to ExamQuestion,acts_as_list,:scope =&gt; :exam_question_id。然后纠正你的关联逻辑。
在视图中你没有选择。迭代不是问题本身,而是ExamQuestion对象。并按顺序迭代答案。