2015-06-26 23 views
0

我们有STI在Ruby中多态/ STI问题在Ruby中

我们的数据库有两个表多态性&一个问题:“账户”和“名单”。 'list'有'account_id','type','description'列。

我们的类看起来像这样:

class Account < ActiveRecord::Base 
     has_many :lists 
     has_many :subscription_lists 
     has_many :email_lists 
    end 

    class List < ActiveRecord::Base 
     belongs_to :account 
    end 

    class SubscriptionList < List 
    end 

    class EmailList < List 
    end 

内部帐户,方法email_listssubscription_lists工作完全按预期。我们的目标是我们希望能够拨打lists这将返回一列所有名单。目前,这是行不通的,self.lists

奇怪的是,Account.find(self.id).lists能给我们一个关联的所有列表的数组。

什么给?我们如何解决这个问题?

+0

所以你想'List.all' ??或者你想'Account.all.map(&:lists)'?除非你是自定义实现的东西,否则我在这里看不到任何多态。 – engineersmnky

+0

你确定它不只是一个缓存问题?那么'self.lists(真)'呢? – tadman

+1

这段代码中绝对没有多态关联。 –

回答

0

您可以使用List.all这将返回所有List对象的ActiveRecord :: Relation的关系,而不管类型如何。

此外,还可以使用@instance_variable.listsAccount

任何实例变量,更重要的是,你可以在一个类的方法使用查询来完成这项工作,像这样,这也将返回一个ActiveRecord ::关系:

List.where('account_id = ?', id)

最后,您AccountList协会不应该包括的List孩子:

class Account < ActiveRecord::Base 
    has_many :lists, inverse_of: :account, dependent: :destroy 
end