我的情况是单个模型需要有三个外来ID。该表包含属于三种模型的信息。
e.g。 - 三种型号 - 键盘,鼠标,显示器 现在我有第四个模型细节 - 其中包含有关keyboard1,mouse1和monitor1等任何组合会发生什么的信息。
那么什么应该是好的设计模式?
现在我使用的是Detail.find_by_keyboard_id_and_mouse_id_and_monitor_id(keyboard1id,mouse1id,monitor1id)#=> Detail1
这当然不是最好的方式...
答案 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)