相同模型之间的Ruby关系

时间:2012-01-11 12:48:56

标签: ruby-on-rails ruby activerecord

我在rails中有一个模型,比方说User,我希望与另一个用户有关系。

用户A,可以是用户B的老板,用户B可以是用户C和D的老板。

这种关系是一对多的。一个用户可以站在多个用户之上。

我该怎么做。
我的用户模型目前有ID,其名称为boss_id,如果用户位于食物链的顶端,则该值为零。

我的活动记录类如下所示:

class User < ActiveRecord::Base

  has_many :users #People beneath the user
  belongs_to :user
end

但现在我想使用与名称的关系。让我们说bossfollowers

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:6)

以下是它的样子:

class User < ActiveRecord::Base

    belongs_to :boss, :class_name => 'User'
    has_many :followers, :class_name => 'User', :foreign_key => :boss_id

end

答案 1 :(得分:1)

它被称为自我加入

自我加入

在设计数据模型时,您有时会找到一个与自身有关系的模型。例如,您可能希望将所有员工存储在单个数据库模型中,但能够跟踪经理和下属之间的关系。这种情况可以通过自联合协会建模:

员工示例:

class Employee < ActiveRecord::Base

  has_many :subordinates, :class_name => "Employee"
  belongs_to :manager, :class_name => "Employee", :foreign_key => "manager_id"

end

通过此设置,您可以检索 @ employee.subordinates @ employee.manager