如何保持物品的顺序

时间:2012-12-25 11:09:36

标签: ruby-on-rails ruby-on-rails-3

我已经在线建立了一个表格,它显示了用户可以选择答案的问题和答案,然后他们可以提交表格。这是我的表格代码:

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

ExamQuestion 模型用于存储考试问题的列表ID,它有一些列:exam_id, question_id, topic_id, correct (boolean), sured (boolean)

ExamAnswer 模型用于存储用户的列表答案ID,它有一些列:exam_id, question_id, user_answer_id

1 个答案:

答案 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对象。并按顺序迭代答案。