has_many和belongs_to在同一个模型中

时间:2013-07-03 11:29:24

标签: ruby-on-rails-3

我有一个模型User,它有一个“role”属性,可以用“employee”或“manager”填充。现在我想要一个经理人员和员工属于经理的关系。

是否可以在同一型号中执行此操作?我能想到这样的事情:

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

即使这样可行,我也怀疑它是最优雅的解决方案,因为你会有2个额外的外键。

1 个答案:

答案 0 :(得分:7)

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

  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