2

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

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

我想获取所有 Parent 对象,并且-如果它们是 Child 对象-让它们急切地加载 :other 关联。所以我希望我能做到:

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

但正如我担心的那样,我收到消息:“找不到名为‘其他’的关联;也许你拼错了?”

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

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

  • 家长 = 事件
  • 孩子 = PostEvent
  • 其他 = 发布

我想记录不同类型的事件,它们都有自己的属性(其中一些是对其他对象的引用),就像上面的例子一样。同时我希望能够列出所有发生的事件,因此是父类。

4

2 回答 2

2

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

如果实在无法将关联移动到父级,可能需要分两步加载,例如:

Parent.find(:all, :conditions => "type != 'Child'") +
  Child.find(:all, :include => [:other])
于 2010-01-27T20:21:44.253 回答
1

由于Child继承自Parent(而不是相反),Parent因此不了解belongs_to :other关联。

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

于 2010-01-27T20:03:17.900 回答