2013-07-03 54 views
3

我有一个模型用户有一个“角色”属性,可以填写“员工”或“经理”。现在我想要一个关系,一个经理has_many雇员和一个雇员belongs_to一个经理。has_many和belongs_to在同一模型内

是否有可能在同一模型中做到这一点?我能想到的是这样的:

has_many :employees, class_name: "User", :foreign_key => "employee_id" 
belongs_to :manager, class_name: "User", :foreign_key => "manager_id" 

即使这样的工作,我怀疑这是最优雅的解决方案,因为你将有2个额外的外键。

+0

我认为你应该能够在每种情况下使用相同的foreign_key。 – davmac

回答

6

我解决它通过创建用户模型中,这些关系:

has_many :employees, class_name: "User", foreign_key: :manager_id 
    belongs_to :manager, class_name: "User", foreign_key: :manager_id 

然后,我可以创造一个经理和员工:

manager = User.create!(first_name: "Mario", last_name: "Manager", role: "manager") 
employee = User.create!(first_name: "Ed", last_name: "Employee", role: "employee", manager_id: 16) 

然后它可以使用的东西,如:

manager.employees 
employee.manager 
相关问题