我在Ruby on Rails中构建了一个PC构建应用程序。该应用程序旨在为客户提供构建自己的计算机的能力
我在布置基本数据结构时遇到了问题。这是我到目前为止基本拥有的:
rails g model manufacturer name:string
rails g model cpu_socket name:string
rails g model cpu_architecture name:string
rails g model cpu_microarchitecture name:string cpu_architecture:references manufacturer:references
rails g model cpu model:string cpu_microarchitecture:references
rails g model motherboard_chipset name:string manufacturer:references
rails g model memory_type name:string
rails g model memory_socket name:string memory_type:references
但现在事情变得复杂了。 我不知道如何为主板型号建模。
以下应该是伪输出:
---------[snip]---------
- #<Motherboard id: 158679, memory_max_size: 68719476736, nvidia_sli: 3, amd_crossfirex: 4>
- #<Chipset id: 14, name: 'Intel X99'>
- #<CpuSocket id: 4, type: 'LGA2011'>
- #<MemorySocket position: 0, type: '288-pin DDR4 DIMM', max_size: 8589934592, frequency: 2133, ecc: false>
- #<MemorySocket position: 1, type: '288-pin DDR4 DIMM', max_size: 8589934592, frequency: 2133, ecc: false>
- #<MemorySocket position: 2, type: '288-pin DDR4 DIMM', max_size: 8589934592, frequency: 2133, ecc: false>
- #<MemorySocket position: 3, type: '288-pin DDR4 DIMM', max_size: 8589934592, frequency: 2133, ecc: false>
- #<SataPort position: 0, type: 'SATA 6G'>
- #<SataPort position: 1, type: 'SATA 6G'>
- #<SataPort position: 2, type: 'SATA 6G'>
- #<SataPort position: 3, type: 'SATA 6G'>
- #<SataPort position: 4, type: 'SATA 6G'>
- #<SataPort position: 5, type: 'SATA 6G'>
- #<SataPort position: 6, type: 'SATA 6G'>
- #<SataPort position: 7, type: 'SATA 6G'>
- #<PciSlot position: 0, type: 'PCI-E 3.x', speed: 16>
- #<PciSlot position: 1, type: 'PCI-E 3.x', speed: 16>
- #<PciSlot position: 2, type: 'PCI-E 3.x', speed: 16>
- #<PciSlot position: 3, type: 'PCI-E 3.x', speed: 16>
- #<PciSlot position: 4, type: 'PCI-E 3.x', speed: 4>
...
---------[snip]---------
如何将这些附加到Motherboard
?我相信可以安全地假设只有一个芯片组(因此chipset:references
),但CpuSocket
s,MemorySocket
s,SataPort
和PciSlot
S'我是不是太害怕了,甚至小孩都能回答这个问题?
我已经在Rails中创建了一些应用程序(&lt; 10),但这个级别的ActiveRecordry对我来说还是一个新的。
当然,我可以使用:json或:hash,但我相信有一种方法可以更多地使用ActiveRecord-ish方式......
答案 0 :(得分:0)
到目前为止,您与模特之间存在一对多的关系。使用主板,您可以有多对多的关系。
给出两个表
| *motherboard* | | * sataport * |
| Intel | | SATA 6G |
| AMD | | SATA 3G |
如果英特尔可以拥有Sata 6G和3G而且AMD也可以拥有SATA 6G和3G,则必须创建一个名为 motherboard_sataport 的第三个表
| motherboard_id | sataport_id |
| 1 | 2 |
| 1 | 1 |
等
这些名为JoinTables,rails可以为您生成一个。首先创建主板表,然后是sataport表。然后使用
创建迁移rails g migration CreateJoinTableMotherboardSataport motherboard sataport
中查看不同类型的关联