2010-11-17 35 views
6

Je construis un rapport de notation - un tableau en deux dimensions qui montre les noms des cours à l'horizontale et une liste d'étudiants allant verticalement.Rails, table bidimensionnelle, pivot, boucles de hachage imbriquées

Student Name | LessonID x | LessonID x | LessonID x   
Joe     95%  95% 
Mary    80%  80% 
Sam     80%     80% 

Mes données est une table qui a ces domaines:

student_id, lesson_id, grade_in_pct, grade_in_pts, grade_high, grade_low, grade_median 

Le nombre total d'étudiants et de cours n'est pas fixé.

J'ai envisagé d'utiliser ruport/acts_as_reportable ou la procédure de pivot mysql, mais il semble que le pivot ne me donne qu'une dimension. Donc, ça ne va pas fonctionner, parce que, à mon avis, je veux ajouter des fonctionnalités de souris et de mise en forme conditionnelle pour afficher plus d'informations sur chaque note. Donc je pense que ma seule option est de générer un hachage imbriqué, puis de le parcourir dans la vue. Quelles sont vos pensées? Quelqu'un pourrait-il suggérer un moyen de construire un hachage imbriqué? Serait-il trop gourmand en processeur pour parcourir 250 lignes (environ 50 étudiants, 5 leçons chacun)?

Je suis coincé. S'il vous plaît aider. Merci!

Répondre

3

Voilà comment je le ferais:

MODELS: 

Student Model: 
    has_many: Grades 
    has_and_belongs_to_many: Lessons 

Lesson Model: 
    has_many: Grades 
    has_and_belongs_to_many: Students 

Grade Model: 
    belongs_to: Student, Lesson 

CONTROLLER: 

@data = Student.all 
@lessons = Lesson.all 

VIEW: 

header_row 

@data.each do |student| 
    @lessons.each do |lesson| 
    student.grades.find_by_lesson(lesson).some_data