Rails活动记录模型关系 - 一个模型属于三个模型

时间:2011-01-05 20:01:48

标签: ruby-on-rails design-patterns database-design activerecord

我的情况是单个模型需要有三个外来ID。该表包含属于三种模型的信息。

e.g。 - 三种型号 - 键盘,鼠标,显示器 现在我有第四个模型细节 - 其中包含有关keyboard1,mouse1和monitor1等任何组合会发生什么的信息。

那么什么应该是好的设计模式?

现在我使用的是Detail.find_by_keyboard_id_and_mouse_id_and_monitor_id(keyboard1id,mouse1id,monitor1id)#=> Detail1

这当然不是最好的方式...

1 个答案:

答案 0 :(得分:1)

我不认为你拥有的是一个糟糕的设计。对于如何实现这一点可能没有太多选择,但您应该考虑如何使用它。就个人而言,我不会将模型称为 详细信息 ,因为它没有告诉您模型的真实含义。像 HardwareConfiguration 这样的东西更明确。可能过于冗长,但您可以根据自己的喜好将其缩短为HardwareConfig或Configuration。

此模型应具有id和三个外键。您还应该为每个外键字段添加数据库索引。

class Detail < ActiveRecord::Base
  belongs_to :keyboard
  belongs_to :mouse
  belongs_to :monitor
end

然后每个硬件模型都会有_many:详细信息如下:

class Keyboard < ActiveRecord::Base
  has_many :details
end

您可以通过ID或任何外键组合查找详细信息组合。

Detail.find(id)
Detail.find_all_by_keyboard_id(keyboard_id)