Каков наилучший способ иметь модель Rails с ассоциациями, но без таблицы базы данных для основного объекта? - PullRequest
2 голосов
/ 21 марта 2011

Например, у меня есть объект учетной записи. Я храню этот объект учетной записи во внешней службе, которая называется службой учетных записей. Но я хотел бы связать учетные записи, хранящиеся во внешней службе, с настройками локального приложения.

Если говорить более конкретно, скажем, ассоциация - это способы оплаты. Счета могут иметь несколько способов оплаты. Я не хочу, чтобы способы оплаты хранились во внешнем сервисе, а в приложении-потребителе. Поэтому у меня будет таблица с именем account_payment_methods, в которой будет указан идентификатор учетной записи, сопоставленный с внешней учетной записью службы, и идентификатор метода оплаты, сопоставленный с локальной таблицей payment_method.

У меня есть модель AccountPaymentMethod, и я мог бы просто использовать ее, но было бы неплохо иметь возможность сделать account.payment_methods << PaymentMethod.first или что-то подобное.

Есть ли какой-нибудь известный метод из коробки или я сам напишу эту функцию?

Ответы [ 3 ]

1 голос
/ 21 марта 2011

Райан Бейтс рассказывал об этом некоторое время назад в этом скриншоте .Я совершенно уверен, что это будет работать в вашем сценарии.Убедитесь, что вы указали правильные атрибуты первичного / внешнего ключа при указании ассоциаций.

1 голос
/ 05 ноября 2014

В Rails 3.2+ вы можете вместо этого взглянуть на этот драгоценный камень.Бестабличные модели RailsCast больше не будут работать.

0 голосов
/ 21 марта 2011

Я полагаю, это зависит от того, где вы хотите, чтобы данные присоединения жили.

Если информация будет жить в службе учетных записей:

Я не думаю, что вы можете иметь ассоциации на не-ActiveRecord :: Base-subclass классы, если не считать их взлома из внутренних компонентов ActiveRecord (создав собственные подклассы HasManyAssociation, которые читают ваши сохраненные атрибуты.) Так что вам может быть немного не повезло.

Если вы хотите, чтобы информация содержалась в вашей обычной базе данных:

Я бы, вероятно, использовал модель AccountBridge, которая отображает Учетную запись в соответствующие таблицы и помещает связи там;также проксирование методов учетной записи для объекта учетной записи.Тогда у меня были бы объекты, которые номинально have_{one,many} :account(s) тайно передавали бы через AccountBridge, и имели бы фактические внешние ключи отношений.

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