Cómo almacenar el orden de los artículos cuando se usa el método aleatorio

He creado una aplicación de examen en línea. Tengo algunos modelos como:

  • Pregunta tiene muchas respuestas
  • Responder pertenece a la pregunta
  • Auditoria

Creé el formulario para que el usuario pueda hacer el examen usando form_tag. Actualmente, utilicé este código para mezclar el orden de las respuestas de las preguntas en el examen. en la vista:

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

Con el código anterior, cada vez que se mostraba el examen, tenía un orden diferente de respuestas. Ahora quiero almacenar el orden de las respuestas, para poder revisar el examen más tarde. Estoy pensando en crear otro modelo para almacenar el pedido, pero no sé cómo obtener el pedido de barajar método.

Entonces quiero preguntar una forma de almacenar el orden de las respuestas. en un examen eso me ayudará a revisar la pregunta con el orden correcto de las respuestas en el examen que tomó el usuario. Alguien me puede dar una idea o solución?

Actualice el modelo para almacenar las respuestas de los usuarios.

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

Este modelo tiene columnas: exam_id, question_id, user_answer_id

preguntado el 23 de diciembre de 12 a las 13:12

¿Cuál es su modelo que almacena la respuesta del usuario para la pregunta correspondiente? -

@ThomasRuiz está bien, actualicé ese modelo. Compruébelo por favor. -

1 Respuestas

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

Y luego, cuando necesites el pedido, podrás acceder a él a través de question.exam_answer.order_answers. Creo que haría algo como esto. Elimina lo que no necesites en el answers_ordered método.

Respondido el 23 de diciembre de 12 a las 14:12

Me gustaría almacenar el orden de las respuestas en un examen, para poder revisar el examen más tarde con el orden correcto de las respuestas. No aclaro cómo lo hace tu código. - Bar

Cuando revisa el examen, tiene el modelo ExamAnswer que almacena la respuesta del usuario de cada una de sus preguntas. Con el nuevo campo agregado, puede ver el pedido con un simple question.exam_answer.order_answers, es donde este código lo almacena. - Thomas ruiz

Creo que tal vez lo entendiste mal. Quiero almacenar el orden de las respuestas de las preguntas en el examen, no el orden de las respuestas del usuario. La otra cosa, definiste un método answers_ordered(current_user) pero cuando lo usaste question.answers_ordered.each, no pasó un objeto de usuario? - Bar

Sí, echo de menos esa cosa en la vista. lo estoy editando Por lo otro. Usted acepta que una pregunta tenga una respuesta de examen para cada usuario, ¿verdad? Entonces, ExamAnswer es el modelo en el que puede almacenar cualquier cosa sobre cada pregunta para cada examen para cada usuario. Entonces puede almacenar el orden de las respuestas en ese modelo, a través del método answers_ordered que escribí. - Thomas ruiz

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.