Rails与多个具有相同关系的实例关联

时间:2018-11-28 11:31:12

标签: ruby-on-rails associations

我有2个模型,EmployeeApproval。我想建立一个关联,以使:approval belongs_to有2个不同的雇员(1个经理,1个下属)。我该如何设置?我希望能够获得经理和下属的所有批准。

2 个答案:

答案 0 :(得分:2)

您可以在class_name上显式声明belongs_tohas_many上的foreign_keyhas_many

class Approval < ApplicationModel
  belongs_to :manager, class_name: 'Employee'
  belongs_to :subordinate, class_name: 'Employee'
end

class Employee < ApplicationModel
  has_many :manager_approvals, foreign_key: :manager_id, class_name: 'Approval'
  has_many :subordinate_approvals, foreign_key: :subordinate_id, class_name: 'Approval'
end

文档:

答案 1 :(得分:1)

1 =>将迁移添加manager_id列添加到Employee

rails g migration add_manager_id_to_employee manager_id:integer

2 =>与员工模型的自引用关联

class Employee < ApplicationRecord
  belongs_to :manager, optional: true
  has_many : subordinates, :class_name => "Employee", :foreign_key => "manager_id"
end

3 =>

class Approval < ApplicationRecord
  belongs_to :employee
  has_one :manager, { where("employees.manager_id= nil ") }
  has_one :subordinate, { where("employees.manager_id= self.employee_id") }
end