我有一个模型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个额外的外键。
答案 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