2010-11-20 6 views
0

Pour un site d'examen sur lesquels je travaille, Ive a obtenu les modèles suivants:Coincé avec requête dans Rails3: Obtenir une page de résultats après un examen

class Exam < ActiveRecord::Base 
    belongs_to :user 
    #has_many :categories 
    has_many :questions, :through => :attempts 
    has_many :attempts 
end 

class Attempt < ActiveRecord::Base 
    belongs_to :exam 
    belongs_to :question 
    belongs_to :answer 
    belongs_to :user 
end 

class Question < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :category 
    has_many :answers, :dependent => :destroy 
    has_many :exams 
    has_many :attempts 
end 

class Category < ActiveRecord::Base 
    acts_as_nested_set 
    has_many :questions, :dependent => :destroy 
    has_many :subcategories, :class_name => 'Category', :foreign_key => 'parent_id' 
    belongs_to :parent, :class_name => 'Category', :foreign_key => 'parent_id' 
end 

La raison pour le modèle «tentatives est que chaque la tentative est en train d'être sauvegardée, donc nous savons si l'étudiant change sa réponse plus tard. Ainsi, dans une configuration standard: la catégorie est sélectionnée, l'examen démarre, des questions apparaissent & chaque tentative de réponse à une question est automatiquement enregistrée. (tout cela fonctionne .., MAIS :) Maintenant, je voudrais voir les résultats dans une fenêtre suivante:

Objectif: Obtenir une liste avec des questions, avec le résultat d'être correct ou pas (la dernière tentative compte):

Mon départ:

e = Exam.last 
e.questions => this produces a list of questions, but how to see if these are correctly answered/not? 

Comme vous pouvez le voir, im coincé assez vite :) Toutes les idées? THX!

Répondre

1

Cela devrait vous donner une liste de toutes les questions et la réponse à la dernière tentative.

<% @e.questions.each do |q| %> 
    <%= q.attempt.last.answer %> 
<% end %> 
+0

thx pour la réponse! Rockz, mais: il me donnera toutes les questions. Y compris les doublons. Im essayant @ e.questions.group (: question_id) .each, mais cela ne fonctionne pas non plus. Des idées? –

+0

ok, maintenant j'ai obtenu: e.questions.find (: all,: select => "questions.id",: groupe => "questions.id"). Chaque {| q | met "# {q.id} - # {q.attempts.last.correct}"} - si vous avez une solution plus propre et plus rails3, s'il vous plaît faites le moi savoir! –

Questions connexes