ruby-on-rails - has_many 具有多级层次结构和单表继承

标签 ruby-on-rails associations single-table-inheritance

在我的 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

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

最佳答案

在使用单表继承模型设置关联时,您需要引用父模型,以便关联可以推断出表名。所以,在你的 Garage你需要的类(class):

has_many :vehicles

如果要将关联限制为 RoadVehicles ,可以添加条件:
has_many :vehicles, :conditions => {:type => ['Car', 'Bus']}

关于ruby-on-rails - has_many 具有多级层次结构和单表继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2136324/

相关文章:

ruby-on-rails - Controller 的命名空间或前缀

cakephp - 如何使用与自身关联的表?

javascript - 同时使用hasOne和belongsTo有什么意义吗?

ruby-on-rails - 使用 STI 查询数据库的效率

python - SQLAlchemy:单表继承,子项中的同一列

ruby-on-rails - PostgreSQL语法错误Rails 4

ruby-on-rails - Carrierwave - "uploading"来自字符串的文件

mysql.h 丢失....(Ruby on Rails,OSX)

ruby-on-rails - 有什么方法可以检查Rails 3.1中has_many关联是否存在?

php - 一张表的多个模型 Laravel