2010-05-19 3 views
2

У меня есть две модели:Использование присоединиться к модели, чтобы связать модель к себе

  • пользователя
  • MentoringRelationship

MentoringRelationship является объединением модель, которая имеет mentor_id колонку и mentee_id колонку (обе эти ссылки user_ids из таблицы пользователей).

Как я могу указать отношение, называемое «попечителями» в классе «Пользователь», которое вернет всех пользователей, наставников этого пользователя, используя таблицу соединений MentoringRelationships? Какие отношения нам нужно объявить в модели User и в модели MentoringRelationship?

ответ

0

Благодаря http://blog.hasmanythrough.com/2007/10/30/self-referential-has-many-through, я был в состоянии поставить что-то вместе, что работает.

в приложение/модели/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 

в приложение/модели/mentoring_relationship.rb

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

Вы можете сделать это, используя следующие способы. В 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

Off верхней части моей головы, ссылаясь на 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 

непроверенная, но мне кажется, что это должно работать.

0

Я считаю, что это работает ...

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 

С помощью этого кода вы можете использовать

@user = User.find(:first) 
@user.mentees 
@user.mentors 
Смежные вопросы