Как избежать дублирования данных в БД (для использования с Rails) - PullRequest
2 голосов
/ 04 марта 2010

У меня есть пять таблиц, которые я пытаюсь заставить хорошо работать вместе, но, возможно, потребуется некоторая помощь.

У меня есть три основных таблицы:

  • счетов
  • участников
  • и роли.

С двумя таблицами соединения

  • account_members
  • и account_member_roles.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' * * * * * * 10 * * * * * 10 * * * * 10: * *: 10 *.

Проблема заключается в двух других таблицах ( роли и account_member_roles ).

Член учетной записи может иметь более одной роли, и у меня есть таблица account_member_roles (fk account_member_id и role_id), присоединяющаяся к таблице присоединения account_members и ролям таблица.

Это кажется логичным, но можете ли вы иметь отношения с таблицей соединений? Например, я хотел бы, чтобы при создании учетной записи я хотел, чтобы @account.save включил роли и аккуратно обновил таблицу account_member_roles . ... но через таблицу account_members .

Я пытался .....

accept_nested_attributes_for :members, :account_member_roles

в account.rb но я получаю .....

ActiveRecord::HasManyThroughCantAssociateThroughHasManyReflection (Cannot modify association 'Account#account_member_roles' because the source reflection class 'AccountMemberRole' is associated to 'AccountMember' via :has_many.)

при попытке сохранить запись.

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

ЦРУ

-ants

Ответы [ 2 ]

1 голос
/ 20 марта 2010

Если я правильно читаю, у вас есть:

аккаунты участников habtm

участников habtm аккаунтов

участников has_many ролей

Если это так, вам просто нужна таблица соединений между учетными записями и участниками, а затем просто обычный FK между участниками и ролями. @ account.members и @ account.members.roles предоставят вам доступ к необходимым атрибутам, а @ account.save сохранит весь беспорядок без суеты.

Я не уверен, что заставляет вас иметь эту таблицу account_members_roles. Я не знаю, сможет ли Rails справиться с этим. Я знаю, что точно не могу. :)

0 голосов
/ 04 марта 2010

Прочитайте здесь: http://blog.hasmanythrough.com/2006/4/17/join-models-not-proxy-collections

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

Так что кажется, что вы хотите использовать has_many: through, и вы будете настроены.

...