我有一个班级 - AccountGroup
- 与各种帐户类(即AwordsAccount
,BingAccount
等)具有多态关系。我已经定义了一个帮助方法 - accounts
- 汇总了所有不同的帐户类型:
def accounts
adwords_accounts + bing_ads_accounts + facebook_accounts + linkedin_accounts
end
现在,我想扩展此方法,以便我可以使用它来添加帐户以及列出它们:
account_group.accounts << an_adwords_account
应该致电:
account_group.adwords_accounts << an_adwords_account
引擎盖下。如何区分使用修饰符<<
调用方法与不使用修饰符调用方法?
谢谢!
答案 0 :(得分:1)
以下是我将如何实现这一点。 Account
模型使用single table inheritance并且type column
区分不同的帐户类型:
class Account < ActiveRecord::Base
belongs_to :account_group
end
class AdwordsAccount < Account
end
class BingadsAccount < Account
end
class FacebookAccount < Account
end
class LinkedinAccount < Account
end
在您的AccountGroup模型中,您可以毫无问题地创建所有这些关联:
class AccountGroup < ActiveRecord::Base
has_many :accounts
has_many :adwords_accounts
has_many :bingads_accounts
has_many :facebook_accounts
has_many :linkedin_accounts
end
现在一切都按预期工作,accounts
包含所有其他类型的组合。添加/删除帐户时,您可能需要在其他关联上调用reload
,但我不确定。试试吧。