2

次の(簡略化された)クラス階層があります。

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

すべての親オブジェクトを取得し、それらが子オブジェクトの場合は、:other 関連付けを積極的にロードさせたいと考えています。だから私はできることを望んでいました:

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

しかし、恐れていたとおり、「'other' という名前の関連付けが見つかりませんでした。スペルを間違えたのでしょうか?」というメッセージが表示されます。

このシナリオで熱心な読み込みを確立する最善の方法は何ですか?

[編集] リクエストに応じて、より具体的な例を次に示します。

  • 親 = イベント
  • 子 = PostEvent
  • その他=ポスト

上記の例のように、さまざまな種類のイベントをすべて独自のプロパティ (一部は他のオブジェクトへの参照) と共にログに記録したいと考えています。同時に、発生したすべてのイベントをリストできるようにしたいので、親クラスです。

4

2 に答える 2

2

モデルでbelongs_to :other関連付けを定義できますか? すべてのオブジェクトにParent関連するわけではありませんが、それが STI の性質です。ほとんどの場合、すべての子供が使用するわけではない列がいくつかあります。Parent

関連付けを親に移動できない場合は、次のように 2 つの手順で読み込む必要がある場合があります。

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 に答える