Ассоциация Rails с несколькими экземплярами одного отношения - PullRequest
0 голосов
/ 28 ноября 2018

У меня 2 модели, Employee и Approval.Я хочу создать ассоциацию таким образом, чтобы :approval belongs_to 2 разных сотрудника (1 руководитель, 1 подчиненный).Как я могу это настроить?Я хотел бы иметь возможность получить все одобрения для менеджера, а также для подчиненного.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

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
0 голосов
/ 28 ноября 2018

Вы можете сделать это явно class_name на belongs_to и has_many и foreign_key на has_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

Документы:

...