Могут ли две связанные модели иметь одинаковое имя объединения? - PullRequest
1 голос
/ 02 августа 2011

У меня есть модель User, которая может получить подарочные сертификаты от модели CardSignup, которую они создают.

Однако я также хотел бы раздать бесплатные подарочные сертификаты от отдельной модели под названием GiftConversion

Мои модели настроены так:

User.rb

has_many :conversions, :foreign_key => :converted_by, :class_name => "CardSignup"
has_many :conversions, :foreign_key => :converted_by, :class_name => "GiftConversion"

CardSignup.rb

belongs_to                     :converted_by, :class_name => "User"

GiftConversion

belongs_to                     :converted_by, :class_name => "User"

Таким образом, я хочу ввести User.find(x).conversions, и он будет возвращать как модель CardSignup, так и модель GiftConversion, если их Foreign_key :converted_by связан с этой моделью пользователя.

К сожалению, это не работает должным образом. Вместо этого компилятор просто получает более поздний оператор. В этом случае GiftConversion, и только позволяет это быть распознанным как User.find(x).conversions.

Кто-нибудь знает, как можно, чтобы модель User поделила обе модели под одним именем?

1 Ответ

0 голосов
/ 02 августа 2011

Возможно, у вас может быть пользовательская ассоциация, которая связывает обе таблицы с пользовательским оператором SQL, используя UNION, или что-то в этом роде, но я не рекомендую этого, поскольку у вас есть две модели, которые представляют что-то довольно похожее, но не идентичное- отличный пример использования для наследования одной таблицы.

Я бы сделал так, чтобы у меня была одна таблица для CardSignup и GiftConversion и использование наследования одной таблицы для соединения двух моделей,поэтому общая таблица будет включать в себя столбец type, который указывает, является ли он CardSignup или GiftConversion.

См. здесь в разделе «Наследование одной таблицы» для получения дополнительной информации:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

...