Рубиновые отношения между той же моделью - PullRequest
1 голос
/ 11 января 2012

У меня есть модель в рельсах, скажем, User, которую я хочу связать с другим пользователем.

Пользователь A, может быть боссом пользователя B, а пользователь B может быть боссомпользователя C и D.

Это отношение один ко многим.Один пользователь может стоять над несколькими пользователями.

Как бы я это сделал.
В настоящее время моя модель пользователя имеет ID с именем boss_id, которое будет равно нулю, если пользователь находится в топе.из пищевой цепи.

Мой класс активных записей выглядит так:

class User < ActiveRecord::Base

  has_many :users #People beneath the user
  belongs_to :user
end

Но теперь я хочу использовать связь с именем.Скажем, boss и followers.

Как мне этого добиться?

Ответы [ 2 ]

6 голосов
/ 11 января 2012

Вот как это будет выглядеть:

class User < ActiveRecord::Base

    belongs_to :boss, :class_name => 'User'
    has_many :followers, :class_name => 'User', :foreign_key => :boss_id

end
1 голос
/ 11 января 2012

Это называется самостоятельное соединение

Self Joins

При проектировании модели данных вы иногда найдете модель, которая должна иметь отношение к себе. Например, вы можете захотеть хранить всех сотрудников в одной модели базы данных, но иметь возможность отслеживать отношения, например, между менеджером и подчиненными. Эта ситуация может быть смоделирована с помощью самосоединяющихся ассоциаций:

Пример сотрудника:

class Employee < ActiveRecord::Base

  has_many :subordinates, :class_name => "Employee"
  belongs_to :manager, :class_name => "Employee", :foreign_key => "manager_id"

end

С помощью этой настройки вы можете получить @employee.subordinates и @employee.manager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...