将多个外键存储在一个属性中

时间:2017-08-01 08:33:34

标签: ruby-on-rails

我正在开发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": "smith@gmail.com",
  "block_ids":'[1, 2, 3]'
}

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

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

所以史密斯控制的ids等于1,2和3。

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

1 个答案:

答案 0 :(得分:1)

这是错误的做法。不要将外键存储在数组中。改为创建一个连接表。

在最简单的安排中,使用has-and-belongs-to-many relationship。这是为了当您不需要将连接两个模型的东西本身作为一个东西时参考,例如一辆车有很多部件。如果连接是真实的,例如连接医生和患者的约会,然后使用has-many-through relationship,其中联接表有自己的模型。

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