2009-11-09 25 views
11

道歉,如果这是一个轻微noob问题,但希望澄清我的想法。我有一个模型可以属于一个模型,或另一个模型。例如:模型“belongs_to”可以/还是不止一个模型?

比方说,我有一个团队模式,我有一个会员模型,这两个模型都可以有一个的BankAccount。

class Team 
    has_many :members 
    has_one :bank_account 
end 

class Member 
    belongs_to :team 
    has_one :bank_account 
end 

class BankAccount 
    belongs_to :team, :member 
end 

对我来说,以上是有道理的,但我喜欢一些比较有经验的Rails人澄清这一点? Rails是否有任何方法可以计算出任何给定BankAccount的父模型,但考虑到它可能是两种模型之一?例如,如果我在团队银行账户中打电话给@ bank_account.member,它会不会摇摆?

感谢您的帮助。

回答

9

你可以使用一个polymorphic relationship

您的银行账户将具有多态关系。

class BankAccount 
    belongs_to :people, :polymorphic => true 
end 

而你的两个(或更多)其他模型将有一个简单的has_many关系。

class Member 
    has_many :bank_accounts, :as => :people 
end 

在您的银行帐户,然后你可以使用@account.people这将给你无论是MemberTeam对象,这取决于它是什么。

而在您的MemberTeam模型中,您可以使用@member.bank_accounts获得适当的银行帐户。

+0

谢谢达米安。非常简单:) – aaronrussell 2009-11-09 13:10:52

+0

在类Member中,您需要添加:as =>:has_many上的人员。 – ScottJ 2009-11-09 17:48:17

+0

了解更多关于多态关联的[回报率指南](http://guides.rubyonrails.org/association_basics.html#polymorphic-associations) – cider 2012-11-21 20:48:06

相关问题