2010-06-23 8 views
0

J'essaie de créer une relation quelque peu complexe dans Rails, et j'ai du mal à trouver la meilleure façon de le faire. J'ai une table Utilisateurs dans laquelle chaque utilisateur agit comme un enseignant et un étudiant. Je voudrais avoir un has_many "étudiants" (qui sont aussi juste des utilisateurs) et un has_many "enseignants" (qui sont aussi juste des utilisateurs). Je ne veux pas faire de sous-classement ou d'héritage de table unique. Je veux juste deux many_to_many différents entre les utilisateurs. Quelle est la meilleure façon de procéder? Est-ce une mauvaise idée à faire? Y a-t-il une meilleure solution?Ruby On Rails - plusieurs à plusieurs entre la même table

+1

Ce n'est pas une mauvaise idée, et vous suivriez les trucs standard pour many-to-many mais utiliseriez la même classe au lieu d'une autre. Il existe un modificateur pour la relation appelée: class_name ou: class. –

Répondre

5

vous devriez être en mesure de configurer un modèle d'affectation et l'utiliser comme vous le feriez pour tout autre many-to-many:

class User < ActiveRecord::Base 
    has_many :student_teacher_assignments, :class_name => "StudentTeacherAssignment", :foreign_key => "student_id" 
    has_many :teachers, :through => :student_teacher_assignments 
    has_many :teacher_student_assignments, :class_name => "StudentTeacherAssignment", :foreign_key => "teacher_id" 
    has_many :students, :through => :teacher_student_assignments 
end 

class StudentTeacherAssignment < ActiveRecord::Base 
    belongs_to :student, :class_name => "User" 
    belongs_to :teacher, :class_name => "User" 
end 

je changerais les noms des affectations d'être un peu moins similaire et plus significatif, mais le concept devrait rester le même

+0

Ahhh, c'est à peu près ce que j'essayais de faire, mais je me trompais légèrement. Cela fonctionne très bien. Merci! –

Questions connexes