6

私の Rails アプリには、次のようなマルチレベルの階層があります。

class Vehicle < ActiveRecord::Base end
class RoadVehicle < Vehicle end
class Car < RoadVehicle end
class Buss < RoadVehicle end

次に、次のように中間レベルを参照するクラスがあります。

class Garage < ActiveRecord::Base
  has_many :road_vehicles
end

この単純化した例では、単一のテーブル継承を有効にするために、 vehicle テーブルに type 列を指定しました。さらに、has_many 関係を有効にするために、garage_id 列が含まれています。新しいガレージを作成して車とバスを追加すると、すべてが期待どおりにデータベースに追加されます。しかし、後でガレージ オブジェクトを取得し、road_vehicles コレクションを調べると、空です。誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

6

単一テーブル継承モデルとの関連付けを設定する場合、親モデルを参照して、関連付けがテーブル名を推測できるようにする必要があります。したがって、Garageクラスには次のものが必要です。

has_many :vehicles

関連付けを に制限するRoadVehicles場合は、条件を追加できます。

has_many :vehicles, :conditions => {:type => ['Car', 'Bus']}
于 2010-01-26T00:38:28.120 に答える