Как вы справляетесь с побочным эффектом дублирования при использовании таблиц Joins - т.е. - PullRequest
1 голос
/ 25 ноября 2010

Использование таблиц соединения в рельсах всегда создает для меня проблемы, особенно в связи с необходимостью создавать дубликаты записей, когда предполагается взаимность. То есть я добавляю кого-то в друзья и автоматически становлюсь их == требуется два присоединения.

Возьмите простое приложение квитанций, которое отслеживает двух человек, которые потратили что.

ПОЛЬЗОВАТЕЛЬ может иметь несколько ДРУЗЕЙ. Для каждого ДРУГА они могут отслеживать несколько вкладок (т. Е. Вкладку для продуктов, другую для счетов и т. Д.), Каждая из которых содержит несколько ЧЕК, добавленных любым ПОЛЬЗОВАТЕЛЕМ.

Так что в этом случае мне понадобится таблица ДРУЖБЫ, и мне нужно создать две дружеские отношения, если я предполагаю, что когда один пользователь объявляет другого как друга, жест отвечает взаимностью. Здесь кроется моя проблема. Мне нужно связать общую вкладку с обоими ДРУЖБАМИ. Это в основном говорит

у дружбы много вкладок, а во вкладке много друзей.

Это включает в себя еще одну таблицу соединений ... я прав?

Это просто похоже на большое дублирование, и мне интересно, есть ли лучший способ сделать это или как вы разумно справляетесь с этим в своем коде? Вы создаете много обратных вызовов, чтобы гарантировать, что когда что-то сделано с одной дружбой, это повторяется и с другой?

Ответы [ 2 ]

1 голос
/ 25 ноября 2010

Вот правдоподобный подход, если не самый лучший:

http://www.dweebd.com/sql/modeling-bidirectional-graph-edges-in-rails/

0 голосов
/ 25 ноября 2010

Я могу ошибаться ... поправьте меня, если я ошибаюсь, только что начали рельсы

User
has_many :friend , :through => friendship
has_many :tab , :through => friend

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