两个关联的模型可以共享相同的连接名称吗?

时间:2011-08-02 16:43:10

标签: ruby-on-rails model polymorphism associations

我有一个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,只要他们的foreign_key CardSignup,它就会返回GiftConversion模型和:converted_by模型与该用户模型相关联。

不幸的是,这不能正常工作。相反,编译器只是抓住后面的语句。在这种情况下,GiftConversion,只允许将其识别为User.find(x).conversions

有谁知道如何让User模型以相同的名义共享两个模型?

1 个答案:

答案 0 :(得分:0)

您可能有一个自定义关联,它使用UNION或类似的东西将两个表连接到自定义SQL语句,但我不推荐它,因为您有两个代表非常相似的模型但是不完全相同 - 单表继承的一个很好的用例。

我这样做的方法是为CardSignupGiftConversion提供一个表,并使用单表继承来连接这两个模型,因此公用表将包含{{1 }}列,指定它是type还是CardSignup

有关详细信息,请参阅“单表继承”下的内容:

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