2017-08-01 58 views
0

我正在开发rails api。 我无法在一列中保存外键数组。 有两种模式:Block和Employee。员工拥有多个员工,并拥有多个员工。多对多的关系。 这是块的索引。将多个外键存储在一个属性

[{ 
    id:1, 
    name: "Block A" 
}, 
{ 
    id:2, 
    name: "Block B" 
}, 
{ 
    id:3, 
    name: "Block C" 
} 
] 

这是员工的发布请求的主体。

{ 
    "first_name":"John", 
    "last_name": "Smith", 
    "email": "[email protected]", 
    "block_ids":'[1, 2, 3]' 
} 

创建雇主用户必须指定雇员控制的块。在block_ids列中,我想存储上述块的外键。

1)问题:如何在一个模型属性中使用数组存储多个外键。

所以史密斯控制哪些ID是等于1,2和3

2)问题的块:然后,使用导轨控制器如何知道哪些块的用户控制。我的意思是如何通过将在block_ids属性中指定的id来知道块的名称。

+1

你的问题是什么?你想做什么? – SteveTurczyn

+0

@SteveTurczyn。我编辑了我的问题 –

+0

您的员工可以拥有多个区块,并且一个区块可以属于许多员工?在Rails中,我们不存储这样的数据,您将不得不创建自定义方法来获取数据。 – Deep

回答

1

这是错误的方法。不要将外键存储在数组中。改为建立连接表。请使用has-and-belongs-to-many relationship。这是为了当你不需要参考将两个模型连成一个东西的东西时,一辆汽车有很多零件。如果连接是真实的,例如连接医生和患者的约会,然后使用has-many-through relationship,其中连接表具有其自己的模型。

这些方法更好的原因是,如果将外键存储在数组中,SQL将无法使用正确的JOIN查询数据。此外,您无法将其标记为外键,因此如果您需要,数据库将无法为您执行referential integrity

相关问题