Ruby中的多态/ STI问题

时间:2015-06-26 19:27:32

标签: ruby ruby-on-rails-4

我们遇到多态性问题& Ruby中的STI

我们的数据库有两个表:' account'和'列出'。 '列表'有列' account_id','类型','说明'。

我们的课程如下:

    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为我们提供了所有相关列表的数组。

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

1 个答案:

答案 0 :(得分:0)

您可以使用List.all返回所有List个对象的ActiveRecord :: Relation,无论其类型如何。

此外,您可以在@instance_variable.lists

的任何实例变量上使用Account

更重要的是,你可以在类方法上使用查询来完成这项工作,就像这样,它也将返回一个ActiveRecord :: Relation:

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

最后,您与Account的{​​{1}}关联不应包含List的子女:

List