Ruby on rails 使用联接模型将模型与自身关联

Ruby on rails 使用联接模型将模型与自身关联,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有两种型号: 使用者 指导关系 MentingRelationship是一个连接模型,它有一个mentor_id列和一个mentee_id列(这两个列都引用用户表中的用户id) 如何在用户类上指定一个名为“mentees”的关系,该关系将返回该用户指导的所有用户,并使用“指导关系”联接表?我们需要在用户模型和指导关系模型中声明哪些关系?您可以使用以下方法来实现。 在user.rb中 def mentees user = User.find_by_sql("select u.* from

我有两种型号:

  • 使用者
  • 指导关系
MentingRelationship是一个连接模型,它有一个mentor_id列和一个mentee_id列(这两个列都引用用户表中的用户id)


如何在用户类上指定一个名为“mentees”的关系,该关系将返回该用户指导的所有用户,并使用“指导关系”联接表?我们需要在用户模型和指导关系模型中声明哪些关系?

您可以使用以下方法来实现。 在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

在我的头顶上,指的是:

类用户:指导关系
有很多:导师,:通过=>:导师关系
结束
班级指导关系“用户”
属于:mentor,:class\u name=>“用户”
结束

未经测试,但这似乎应该有效。

我相信这是有效的

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
多亏了,我才能够把一些有用的东西组合起来

应用程序内/models/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
  belongs_to :mentee, :class_name => "User"
  belongs_to :mentor, :class_name => "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
  belongs_to :mentee, :class_name => "User"
  belongs_to :mentor, :class_name => "User"