Ruby on rails 对许多Rails关联进行建模

Ruby on rails 对许多Rails关联进行建模,ruby-on-rails,database-design,model,Ruby On Rails,Database Design,Model,我正试图思考我应该如何为一个具有多个has_one关联(20+)的父模型建模。我有一个名为House的模型,它是所有其他模型的父模型: class House < ActiveRecord::Base has_one :kitchen has_one :basement has_one :garage has_one :common_room #... Many other child models end class House

我正试图思考我应该如何为一个具有多个has_one关联(20+)的父模型建模。我有一个名为House的模型,它是所有其他模型的父模型:

class House < ActiveRecord::Base
  has_one :kitchen
  has_one :basement
  has_one :garage
  has_one :common_room
  #... Many other child models
end
class House
所有子模型都包含特定于其自己类的唯一属性。我考虑过STI,但实际上没有任何共享功能或输入可以跨模型使用。我还想过制作一个“超级模型”,但这并没有真正遵循Rails的最佳实践,而且它将包含200多列。是否有另一种设计模式或结构可以用来有效地对此进行建模,从而减少数据库调用

class House
  has_many :rooms
  Room::TYPES.each do |room_type|
    has_one room_type, -> { where(room_type: room_type) }, class_name: "Room"
  end

class Room
  belongs_to :house
  TYPES = %i/kitchen basement garage common_room etc/.freeze
end
在迁移过程中,确保
添加索引:rooms,[:type,:house\u id],unique:true
。除非一所房子可以有超过一种类型的房间。如果是这样的话,我认为需要一种不同的方法


对于第二个问题,这实际上取决于,您使用的是什么类型的数据库?如果是PostgreSQL,您可以使用hstore并将其存储为属性散列。或者可以序列化db,将其作为散列。或者你可以有另一个房间里有很多的模型。例如,有很多:属性,并创建一个属性模型来存储这些信息。这取决于您还想对信息做什么

为什么不在Rails中使用多态性?这会简单得多

class House < ActiveRecord::Base
    has_many :properties, as: :property_house
end

class Kitchen < ActiveRecord::Base
    belongs_to :property_house, polymorphic: true
end

class Garage < ActiveRecord::Base
    belongs_to :property_house, polymorphic: true
end
class House

有关更多信息,请转到此处:

然后如何存储每个模型的唯一属性?也就是说,厨房有布尔人的“食品储藏室”、“岛”等,地下室有“完工”、“走出去”的财产?(为这个新信息编辑了我的原始帖子)这取决于你使用的是什么类型的数据库?如果是PostgreSQL,您可以使用hstore并将其存储为属性散列。或者可以序列化db,将其作为散列。或者你可以有另一个房间里有很多的模型。例如,
有许多属性,并创建一个属性模型来存储这些信息。这取决于你还想对这些信息做什么。是的,我正在使用PostgreSQL。hs商店正是我想要的,谢谢!令人惊叹的。干杯,伙计!我之所以选择不这样做,是因为每个子模型(厨房、车库等)都有不同的属性,需要保存到数据库中。所以我最终会得到一个包含200多个布尔字段的表,这不是我想要处理的。@Mike我不太明白你的意思。多态性意味着您需要为每个子模型使用单独的表。例如:厨房模型的厨房、车库模型的车库等。。。您将不会有一张可容纳所有子对象的表models@Mike或者您的意思是希望有一个表来存储所有子模型?