渴望在子类上加载关联

我有以下(简化)类层次结构:

def Parent < ActiveRecord::Base end def Child < Parent belongs_to :other end def Other < ActiveRecord::Base end 

我想得到所有的父对象 – 如果它们是Child对象 – 让他们急切地加载:其他关联。 所以我希望我能做到:

 Parent.find(:all, :include => [:other]) 

但是,正如我所担心的,我得到的信息是:“没有找到名为’其他’的协会;也许你拼错了它?”

在这种情况下建立预先加载的最佳方法是什么?

[编辑]根据要求,这是更具体的例子:

  • 父=事件
  • Child = PostEvent
  • 其他=发布

我想记录不同类型的事件,所有事件都有自己的属性(其中一些是对其他对象的引用),如上例所示。 同时我希望能够列出发生的所有事件,从而列出父类。

你能在Parent模型中定义belongs_to :other关联吗? 它与每个Parent对象无关,但这就是STI的本质:你几乎总会有一些每个孩子都没有使用的列。

如果您确实无法将关联移动到父级,则可能必须分两步加载,例如:

 Parent.find(:all, :conditions => "type != 'Child'") + Child.find(:all, :include => [:other]) 

由于Childinheritance自Parent (而不是相反), Parent不知道belongs_to :other关联。

我认为您需要重新考虑如何为应用建模。 也许你的实际模型的某些细节会提出一些关于你想要完成的替代方法的答案。