如何创建多态Ruby方法?

时间:2014-08-13 18:06:20

标签: ruby polymorphism

我有一个班级 - AccountGroup - 与各种帐户类(即AwordsAccountBingAccount等)具有多态关系。我已经定义了一个帮助方法 - 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
引擎盖下。如何区分使用修饰符<<调用方法与不使用修饰符调用方法?

谢谢!

1 个答案:

答案 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,但我不确定。试试吧。