Чтобы создать множественную ассоциацию самостоятельного объединения «многие ко многим», я бы порекомендовал иметь больше смысла иметь несколько таблиц для управления соединением. Таким образом, это очень ясно с точки зрения данных относительно того, что именно происходит, и это также ясно с точки зрения логики. Итак, что-то вроде этого:
create_table :manage_relation do |t|
t.references :employee_id
t.references :manager_id
end
create_table :subordinate_relation do |t|
t.references :employee_id
t.references :subordinate_id
end
class Employee < ActiveRecord::Base
has_many :subordinates,
:through => :subordinate_relation,
:class_name => "Employee",
:foreign_key => "subordinate_id"
has_many :managers,
:through => :manage_relation,
:class_name => "Employee",
:foreign_key => "manager_id"
belongs_to :employee,
:class_name => "Employee"
end
Таким образом, он не становится более запутанным, чем необходимо с точки зрения кодирования, и вы можете получить к нему доступ с помощью стандартных коллекций, и он соответствующим образом настроит ваши соединения для вас без необходимости управлять ими. Итак, обе эти коллекции должны работать ..
employee.managers
employee.subordinates
И вам не нужно было управлять никакими другими переменными. Есть смысл? Добавляет таблицу, но улучшает ясность.