2011-08-02 66 views
1

我有一个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模型共享同名的两个模型?

回答

0

你也许有两个表使用UNION,或类似的东西自定义SQL语句连接一个自定义的关联,但我不建议这样做,因为你有两个型号代表非常相似,但不完全相同的东西 - 一个很好的单表继承的用例。

我会做到这一点的方法是有一个单一的表都CardSignupGiftConversion,并使用单表继承两个模型连接,从而使公共表将包括type列指定它是否是一个CardSignupGiftConversion

看到这里下的“单表继承”的详细信息:

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

+0

我真的不能让这种正面或反面。但这似乎是一个好主意。 – Trip

+0

这篇文章解释得很好:http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html –

+0

它仍然没有解释如何合并三个不同的模型在这2到1/1到2个多态关联。 – Trip

相关问题