2010-12-03 36 views
1

J'utilise Rails 3 et voulait obtenir les classes un étudiant a accès basé sur le modèle ci-dessousRails requête à l'aide HMTH et plusieurs modèles rejoindre

class Student 
    has_many :students_levels 
    has_many :levels, :through => :students_levels 
    end 

    class Class 
    has_many :classes_levels 
    has_many :levels, :through => :classes_levels 
    end 

    class Level 
    has_many :students_levels 
    has_many :classes_levels 
    end 

    class StudentsLevel 
    belongs_to :students 
    belongs_to :levels 
    end 
    class ClassesLevel 
    belongs_to :classes 
    belongs_to :levels 
    end 

je suis venu avec la requête ci-dessous, mais n'a pas Je pense que cela semblait être la meilleure façon de faire les choses et je voulais obtenir des suggestions supplémentaires. Thx

Class.where(:id => (ClassesLevel.where(:level_id => Student.find(1).levels))) 

Je veux ajouter cela comme une méthode d'instance pour étudiants et pensait qu'il y aurait une meilleure façon de faire quelque chose avec a beaucoup à travers.

+3

Juste un indice: le nom de classe appelé «Classe» peut vous conduire à de nombreux problèmes. – hade

Répondre

0

Je ne comprenais pas toute la logique derrière votre structure de classe. Pourquoi ne reliez-vous pas directement les étudiants à une classe? Et comment une classe peut avoir plusieurs niveaux. Je veux dire que si vous avez Math1 et Math2, ce sont des classes différentes, n'est-ce pas? Ou avez-vous Math1,2,3?

Eh bien, de toute façon, voici la solution si vous voulez utiliser assosiations courant, je l'espère suites vos besoins:

Class Student  
... 
def available_classes 
    Class.find(:all, 
     :include => {:levels => {:students_levels => :student}}, 
     :conditions => ["students.id = ?", self.id]) 
    end 

Et désolé, cela est encore dans Rails format 2.x ...

+0

@Joey, une chance avec ça? – hade