Как смоделировать дружеские отношения в ActiveRecord - PullRequest
2 голосов
/ 14 сентября 2011

У меня есть модель людей, для которой я хочу разрешить неуправляемые отношения (Друг, Семья, Сосед и т. Д.). Когда вы помечаете одного человека как друга другого, тогда они оба дружат друг с другом.

Class People
  id
  name

Class Relationship
  id
  person_a_id
  person_b_id
  relationship_type

Теперь, при условии, что у нас есть некоторые данные о людях (идентификаторы записей = 1,2,3,4,5), вот как может выглядеть таблица отношений:

id  person_a_id  person_b_id  relationship_type
--  -----------  -----------  --------------------
 1     1            2           friend
 2     1            3           neighbor

Что это говоритЯ - это то, что у Человека 1 есть друг (Человек 2) и сосед (Человек 3).Это также говорит мне, что у Личности 2 есть друг (Личность 1), а у Личности 3 есть сосед (Личность 1).

Я думаю, что я мог бы сделать это с некоторой Ассоциацией самообращения , ноЯ думаю, что есть более чистый путь.Я что-то упускаю, и там есть Драгоценный камень, ожидающий выполнения всех моих потребностей (по крайней мере, насколько этот вопрос идет)?Или я должен написать один ...

1 Ответ

5 голосов
/ 14 сентября 2011

Самостоятельные ссылки - вот путь сюда.

Лучший ресурс по теме, на мой взгляд, это RailsCast .

Модель пользователя (Персона для вас):

has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user

Модель дружбы (Отношения для вас):

belongs_to :user
belongs_to :friend, :class_name => "User"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...