нетерпеливая загрузка ассоциации на подкласс - PullRequest
2 голосов
/ 27 января 2010

У меня есть следующая (упрощенная) иерархия классов:

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

Я хочу получить все родительские объекты и, если они являются дочерними объектами, попросить их загрузить другую ассоциацию. Поэтому я надеялся, что смогу сделать:

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

Но, как я и боялся, я получаю сообщение: «Ассоциация под названием« прочее »не найдена; возможно, вы ошиблись?»

Каков наилучший способ установить энергичную загрузку в этом сценарии?

[Изменить] Как и требовалось, вот более конкретный пример:

  • Родитель = Событие
  • Child = PostEvent
  • Другое = Сообщение

Я хочу регистрировать различные типы событий, все со своими собственными свойствами (некоторые из которых являются ссылками на другие объекты), как в примере выше. В то же время я хочу иметь возможность перечислить все события, которые произошли, следовательно, родительский класс.

Ответы [ 2 ]

2 голосов
/ 27 января 2010

Можете ли вы определить связь belongs_to :other в модели Parent? Это не относится к каждому Parent объекту, но это характер STI: у вас почти всегда будет некоторый столбец, который не используется каждым дочерним элементом.

Если вы действительно не можете перенести ассоциацию на родителя, возможно, вам придется загрузить в два этапа, например:

Parent.find(:all, :conditions => "type != 'Child'") +
  Child.find(:all, :include => [:other])
1 голос
/ 27 января 2010

Поскольку Child наследуется от Parent (а не наоборот), Parent не знает об ассоциации belongs_to :other.

Я думаю, вам нужно пересмотреть то, как вы моделируете свое приложение. Возможно, некоторые особенности ваших реальных моделей вызовут некоторые ответы об альтернативных методах того, что вы пытаетесь достичь.

...