ActiveRecord模型的继承和多态性

| 我有一个类的继承关系,但没有单表继承。
ThrowAway < ActiveRecord::Base
Junk < ThrowAway
问题在于所有
ThrowAway
对象都引用了
Location
。 A
Location
belongs_to :throw_away, :polymprohic => true
问题是,如果我定义
ThrowAway < ActiveRecord::Base
  has_many :locations, :as => :throw_away
end
那么即使Junk继承了它并定义了另一个表名,“ 7”列也将始终设置为“ 2”,而我实际上希望将其设置为“ 9”。 现在会有许多这样的子类,所以会有
Stuff < ThrowAway
Rags < ThrowAway
等。我希望它们全部都具有
Location
,而无需在每个单独的类中定义位置关系。 铁轨有可能吗?问题在于,不仅存在位置,还存在其他此类关系,我宁愿在此遵循一些DRY。我假设我需要创建一个生成器方法,该方法将在当前对象上执行并在运行时生成这些关系生成器。 谢谢。     
已邀请:
        ActiveRecord似乎无法与不是STI的模型继承配合使用。幸运的是,这可能并不是您真正想要的。您可能需要混入。 创建一个模块,其中包含您希望模型共享的所有功能,并且所有模型都包含该模块。我可能会将模块放在您的models目录中,但是给它一个形容词作为名称。有些人可能会将模块放在lib目录中,或者在models目录中创建一个lib目录。 对于您的情况,您需要在混入模块时定义关联,因此您将需要使用回调。就像是..
module Trashable
  def self.included(base)
    base.send :has_many, :locations, :as => :throw_away
  end
end
    

要回复问题请先登录注册