如何在使用shuffle方法时存储项的顺序



我建立了一个在线考试应用程序。我有一些模型,如:

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

我构建了用户可以使用form_tag进行考试的表单。目前,我使用这段代码在视图中对考试中的答案顺序进行洗牌:

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

上面的代码,每次显示考试,它有不同的顺序的答案。现在我想把答案的顺序存储起来,以便以后复习。我正在考虑创建另一个模型来存储订单,但我不知道如何从shuffle方法中获取订单。

所以我想问一种方法来存储答案的顺序在考试,这将有助于我可以回顾问题的正确顺序的答案在考试中,用户所采取的。有人能给我一个主意或解决办法吗?

更新模型以存储用户的答案

class ExamAnswer
  belongs_to :exam
  belongs_to :question
  belongs_to :answer
end

这个模型有列:exam_id, question_id, user_answer_id

# in app/models/question.rb
def answers_ordered(current_user)
  answers_ordered = question.answers.shuffle
  exam_answer = self.exam_answers.where(:user_id => current_user.id, :question_id => self.id, :exam_id => self.exam_id).first
  if exam_answer.nil?
    exam_answer.user_id = current_user.id
    exam_answer.question_id = self.id
    exam_answer.exam_id = self.exam_id
  end
  exam_answer.order_answers = answers_ordered.map{&:id} # add .join(';') if your sgdb does not handle the Array type
  exam_answer.save
  answers_ordered
end
# in your app/models/exam_answer.rb
class ExamAnswer
  belongs_to :user
  belongs_to :exam
  belongs_to :question
  belongs_to :answer
  # add the field order_answers as type Array or String, depending of your SGBD
end
# in your view
<% question.answers_ordered(current_user).each do |answer| %>
  ...
<% end %>

然后,当您需要订单时,您可以通过question.exam_answer.order_answers访问它。我想我也会这么做。删除answers_ordered方法中不需要的内容

相关内容

  • 没有找到相关文章

最新更新