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

Rails association with multiple instances of same relation

我有 2 个模型,EmployeeApproval。我想建立一个协会,这样 :approval belongs_to 2 名不同的员工(1 名经理,1 名下属)。我该如何设置?我希望能够为经理和下属拉取所有批准。

您可以在 belongs_tohas_many 上显式声明 class_name,在 has_many

上显式声明 foreign_key
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 => 添加迁移将 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