2010-01-25 50 views
6

在我的Rails应用程序,我有以下类型的多层次结构:的has_many多层次结构和单表继承

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 

在这个简化的例子中,我已经给车型表一个类型列来启用单表继承。此外,它还包含一个garage_id列,以启用has_many关系。当我创建一个新的车库并添加汽车和公共汽车时,所有都按照预期添加到数据库中。但是,当我稍后检索车库对象并检查road_vehicles集合时,它是空的。谁能告诉我我做错了什么?

回答

6

设置与单个表继承模型的关联时,需要引用父模型,以便关联可以推断表名。所以,在你Garage类,你需要:

has_many :vehicles 

如果你想给协会限制RoadVehicles,您可以添加条件:

has_many :vehicles, :conditions => {:type => ['Car', 'Bus']}