2010-05-19 2 views
2

J'ai deux modèles:En utilisant une jointure modèle pour relier un modèle à se

  • utilisateur
  • MentoringRelationship

MentoringRelationship est une jointure modèle qui a une colonne mentor_id et une colonne mentee_id (ces deux user_ids de référence de la table des utilisateurs).

Comment puis-je spécifier une relation appelée 'mentees' dans la classe User qui renverra tous les utilisateurs encadrés par cet utilisateur, en utilisant la table de jointure MentoringRelationships? Quelles relations devons-nous déclarer dans le modèle User et dans le modèle MentoringRelationship?

Répondre

0

Merci à http://blog.hasmanythrough.com/2007/10/30/self-referential-has-many-through, j'ai pu mettre quelque chose ensemble qui fonctionne.

dans app/modèles/user.rb

has_many :mentee_relationships, :class_name => 'MentoringRelationship', :foreign_key => :mentor_id 
    has_many :mentees, :through => :mentee_relationships, :source => :mentee, :foreign_key => :mentor_id 

    has_many :mentor_relationships, :class_name => 'MentoringRelationship', :foreign_key => :mentee_id 
    has_one :mentor, :through => :mentor_relationships, :source => :mentor, :foreign_key => :mentee_id 

dans app/modèles/mentoring_relationship.rb

belongs_to :mentee, :class_name => "User" 
    belongs_to :mentor, :class_name => "User" 
0

Vous pouvez le faire en utilisant les moyens suivants. Dans user.rb

def mentees 
user = User.find_by_sql("select u.* from the users u, mentoring_relationships m where m.mentor_id = #{self.id} and u.id = m.mentee_id") 
end 

In controller 

@user.mentees >> all of the users mentored by @user 
2

Du haut de ma tête, se référant à la API docs:

class User < AR::B 
    has_many :mentees, :through => :mentoring_relationship 
    has_many :mentors, :through => :mentoring_relationship 
end 

class MentoringRelationship < AR::B 
    belongs_to :mentee, :class_name => "User" 
    belongs_to :mentor, :class_name => "User" 
end 

Untested, mais il semble que cela devrait fonctionner.

0

Je crois que cela fonctionne ...

class User < ActiveRecord::Base 
    has_many :mentees, :foreign_key => :mentee_id, 
     :class_name => "MentoringRelationship" 

    has_many :mentors, :foreign_key => :mentor_id, 
     :class_name => "MentoringRelationship" 
end 

class MentoringRelationship < ActiveRecord::Base 
    belongs_to :mentee, :class_name => "User" 
    belongs_to :mentor, :class_name => "User" 
end 

Avec ce code, vous pouvez utiliser

@user = User.find(:first) 
@user.mentees 
@user.mentors 
Questions connexes