0

オンライン受験アプリを作りました。私は次のようないくつかのモデルを持っています:

  • 質問には多くの答えがあります
  • 回答は質問に属します
  • テスト

ユーザーが を使用して試験を実行できるようにフォームを作成しform_tagました。現在、このコードを使用して、ビューの試験で質問の回答の順序をシャッフルしました。

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

上記のコードでは、試験が表示されるたびに、回答の順序が異なりました。ここで、後で試験を確認できるように、回答の順序を保存したいと考えています。注文を格納する別のモデルを作成しようと考えていますが、シャッフルメソッドから注文を取得する方法がわかりません。

したがって、ユーザーが受けた試験で正しい順序で質問を確認できるように、試験で回答の順序を保存する方法を尋ねたいと思います。誰かが私にアイデアや解決策を教えてもらえますか?

モデルを更新してユーザーの回答を保存する

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

このモデルには、exam_id、question_id、user_answer_id の列があります。

4

1 に答える 1

0
# 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

于 2012-12-23T13:22:22.963 に答える