如何使用具有多个子类别的项目对表进行建模?

时间:2014-03-01 17:53:40

标签: ruby-on-rails postgresql activerecord ruby-on-rails-4

我需要一些建议。我是建模数据库的新手,所以我想知道什么是最方便的数据库模型,这将使​​我的生活更轻松。我有一个可以有多个描述性子类别的Car项目,比如TireCategory,GlassCategory,EngineCategory ......

我正在考虑做这样的事情:

class Car < ActiveRecord::Base
  belongs_to :tire_category
  belongs_to :glass_category
  belongs_to :engine_category

  #Car would have three additional columns: tire_category_id, glass_category_id, engine_category_id
end

class TireCategory < ActiveRecord::Base
  has_many :cars
end

class GlassCategory < ActiveRecord::Base
  has_many :cars
end

class EngineCategory < ActiveRecord::Base
  has_many :cars
end

这种推荐方式或其他关系是否更合适?谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将汽车(使用uniq数据,如型号名称和sku)存储在一个表格中,将属性(如引擎,眼镜)存储在另一个表格中,并将另外一个表格存储在汽车和属性之间。

class Car < ActiveRecord::Base
  has_many :car_properties, dependent: :destroy
  has_many :properties, through: :car_properties
end

class Property < ActiveRecord::Base
  has_many :car_properties, dependent: :destroy
  has_many :cars, through: :car_properties
end

class CarProperty < ActiveRecord::Base
  belongs_to :car
  belongs_to :property
end

如果您有很多属性并希望在逻辑上将它们分开,那么为每个属性创建单独的模型。与EngineTireGlass一样。每个模型都包含属性变体。然后为每个属性创建一个表以将其连接到汽车。与CarEngineCarGlass一样。它将包含car_idproperty_idengine_idglass_id)。