Это должно быть легко. Я думаю, что должен быть увлечен именами.
И «менеджер», и «подчиненный» (работник) относятся к классу «Персона».
Вот что у меня есть:
class Person < ActiveRecord::Base
has_many :person_manager_assignments
has_many :managers, :through => :person_manager_assignments
has_many :subordinates, :through => :person_manager_assignments
end
class PersonManagerAssignment < ActiveRecord::Base
has_one :subordinate, :class_name => "Person", :foreign_key => "id", :primary_key => 'person_id'
has_one :manager, :class_name => "Person", :foreign_key => "id", :primary_key => 'manager_id'
end
Что отлично подходит для проверки и назначения менеджеров.
Я пойман со стороны о подчиненных. Возвращает личность человека, а не его подчиненных:
p.subordinates
Person Load (0.5ms) SELECT "people".* FROM "people" INNER JOIN "person_manager_assignments" ON "people"."id" = "person_manager_assignments"."person_id" WHERE "person_manager_assignments"."person_id" = 15973
Посмотрите, где бит в предложении WHERE, где он соответствует "person_id"? Мне нужно, чтобы это было "manager_id", но, похоже, не помогает справка с ассоциативными значениями PersonManagerAssignment foreign_key и primary_key.
Есть идеи?