0

对使用数据库的整个 Web 编程来说仍然很新,并且很高兴你能给我的任何提示。

现在,我一直试图永远解决这个问题,但我似乎无法找到一个优雅的解决方案。

假设我有一家酒店,有好几层,例如 1 楼、2 楼、3 楼。

假设每层楼有几种类型的套房,例如总统套房、蜜月套房、皇帝套房。每间套房都有许多属于它的房间。房间本身的家具各不相同。

现在,每种类型的套房都可以在一层或多层中找到。

+1stFloor
   +president suite
      +room1
      +room2
   +honeymoon suite
      +room1
+2ndFloor
   +president suite
      +room1
      +room2
   +emperor suite
      +room1
      +room2
      +room3
+3rdFloor
   +emperor suite
      +room1
      +room2
      +room3
   +honeymoon suite
      +room1

所以我可以从地板模型开始,继续属于地板的套房模型和属于套房的房间模型。也许房间里甚至有不同类型的家具,所以房间 1、2 和 3 并不相似,尽管房间 1 和不同的房间 1 是相似的。这变得非常复杂,我不确定我做对了。

另一种方法是将每个套件建模为一个完整的单独资源

关于如何正确执行此操作的任何提示?

  • 我是否为每个套房建立了一个单独的模型,尽管它们在属性方面相似,除了房间的数量和类型。一旦您拥有超过 100 个不同的套件,这似乎是相当重复且容易出错的。

  • 我是否构建了单独的资源,例如楼层、套房、房间并实例化并一个接一个地关联它们?我会知道如何做到这一点,所以我可以建造一个总统套房。但是,当我需要不止一间总统套房时,如何建立相同的套房/房间关联?

  • 当房间除了奇怪的家具外,它们共享大部分属性时,我将如何建模房间?

例如,计算机硬件销售商如何为其目录建模。同一类别的物品有很多相似的属性,但它们的类别太多了……

非常感谢任何提示、指针或教程链接。

谢谢蒂姆

4

2 回答 2

1

我认为它可能是这样的。

class Floor < ActiveRecord::Base
  has_many :suites
end

class Suite < ActiveRecord::Base
  belongs_to :floor
  belongs_to :suite_category
  has_many :rooms, :dependent => :destroy
end

class SuiteCategory < ActiveRecord::Base
  has_many :suites
end

class Room < ActiveRecord::Base
  belongs_to :suite
  has_and_belongs_to_many :room_types
end

class RoomType < ActiveRecord::Base
  has_and_belongs_to_many :rooms
end

这样,您可以拥有许多具有不同家具配置的房间类型,并将您的房间与它们相关联。有点像标签。

于 2013-09-07T22:19:28.340 回答
0

您需要以下内容:...

class Room < ActiveRecord
  belongs_to :suite
  validates :suite, presence: true #make sure room is not a rouge entry
  validates :floor_num, presence: true
end

class Suite < ActiveRecord
  has_many :rooms, dependent: :destroy
  validates :type, presence: true
end

通过这种安排,您可以拨打以下电话:

rooms = Room.find_by_floor_num('floor number') #returns all room at a given floor
suite = Suite.find 1 #returns a particular suite
suite_rooms = suite.rooms.all #returns all rooms for the given suite
suite_room = suite_rooms.first
suite_room_type = suite_room.suite.type

编辑:

对于因房间而异的房间家具,最好的方法是创建另一个模型,比如说

class Room < ActiveRecord
   ...
   has_many :furniture
   ...
end

class Furniture < ActiveRecord
   belongs_to :room
   validates :room, presence: true
   validates :name, presence: true
end

然后与上面的代码一样,您可以调用如下方法:

room.furniture.all #to get all pieces of furniture
table.room #to find the location of the lamp
# etc

另一个编辑

当然,如果房间里有家具,这意味着套房也有,所以你唯一需要的就是像这样向 Suite 类添加一个更多的关联

class Suite < ActiveRecord
   ...
   has_many :furniture, through: :rooms
   ...
end

请注意这里“房间”的复数形式。
使用这个小代码,您现在可以调用以下...

suite.furniture # get all pieces of furnishing from all the room in this suite

编辑:
例如,如果您需要您的楼层包含更多房间,那么您将需要使用多态关联。ActiveRecords Associations 上的官方 ruby​​ on rails 指南很好地解释了如何使用它们:)

希望这能回答你的问题 :) 祝你学习 rails 好运 :) 看看M.Hartl 的教程,它是一个结构良好且内容丰富的起点。

于 2013-09-07T21:53:11.177 回答