Отношения в базе данных Ruby Rails - один ко многим - PullRequest
0 голосов
/ 25 ноября 2010

Это в основном теоретический вопрос, но я просто хотел убедиться, что я делаю это правильно. Рассмотрим проект Ruby Rails, в котором есть две модели, одна из которых - Пользователь, а другая - Альянс.

Пользователь может иметь только один альянс. Альянс может иметь много пользователей.

Это очень просто отношения: has_many,: assign_to.

Однако я чувствую, что использование промежуточной модели - лучший способ сделать это. Это будет: has_many: through: users_alliances, где users_alliances будет промежуточной моделью.

Какой, по вашему мнению, лучший способ сделать это?

Ответы [ 2 ]

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

Не используйте habtm, это не превращает объединение в полноценную модель, которая вам нужна.Используйте has_many: through на стороне альянса и has_one: through на стороне пользователя.

User
  has_one :alliance_membership
  has_one :alliance, :through => :alliance_membership

AllianceMembership
  belongs_to :user
  belongs_to :alliance

Alliance 
  has_many :alliance_memberships
  has_many :users, :through => :alliance_memberships

Лично я предпочитаю имя класса AllianceMembership для UserAlliance, но вы можете использовать любой.UsersAlliances уродлив, хотя ИМО.(еще одно преимущество has_many / one: through заключается в том, что вы можете вызывать объединяющую таблицу / класс как хотите).

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

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

Почему ты так думаешь?Как вы думаете, что вы получите от модели соединения?

Лично я сомневаюсь, что дополнительная таблица / модель будет полезна, если только вы не думаете, что один-ко-многим станет в будущем много-много.

...