使用Rails5为每个公司的每个员工生成唯一的ID

问题描述:

我想为公司的每个员工创建唯一的ID。例如,目前我越来越喜欢这样。使用Rails5为每个公司的每个员工生成唯一的ID

公司有很多员工和员工belongs_to的公司

company1= employee1 
company1 = employee2 
company1 = employee3 
company2 = employee4 
company2 = employee5 

所以,这里的员工ID是没有得到改变,而COMPANY_ID改变。

所以,我想是这样的: 对每一家公司雇员标识应与1 像

Company1 = employee1 
    company1 = employee2 
    company1 = employee3 
    company2 = employee1 
    company2 = employee2 

谁能帮我该怎么做,在Rails5开始?

职员表

 id name  position 
    1  aaa  eg_position 
    2  vvv  qqq 

公司表

id name  
    1  xxx 
    1  yyy 

所以目前其存储像 XXX - 1,YYY-2 我想这样的XXX-1.yyy-1

+0

你不应该担心或更改ID。 Rails会为你处理它。如果您尝试自己操作模型ID,您可能会遇到错误。我完全不明白你为什么需要这样做 –

使用基于组合键范围的唯一性验证。 employee_idcompany_id

validates :employee_id, uniqueness: {scope: [:employee_id, :company_id]}

我们必须非常清楚。

我假设你有一张员工表,其中存储了所有不同公司的所有员工。

如果是这样的话,那么你不能有两个相同的主键。你不可以做这个。

但是你可以做的是有另一个领域,也许员工数量(这是不同的ID),可以是不同的公司在不同的雇员相同。

我个人不喜欢复合主键的想法。

我会做的是在你的表中创建另一个名为employee number的列。并用它来存储你所说的:“id”

我希望这有助于。

编辑:

进一步解释。

表中的每一行都有一个名为“id”的列。这是一个特殊的名字。这是“主键”的名称。不要改变这个名字。同一个表中的两行不能具有相同的“id”或主键。你做不到。这是数据库的基础。您不能在同一表的两行中具有相同的主键 - 对于mysql,psql,Access等。

但您要标识具有相同“标识号”的两名雇员。没关系。你能行的。只是不要打电话给员工识别号码:“id”,因为这不起作用。你可以把它叫做“employee_no”,这样可以正常工作。

显示我的数据库模式,我们可以进一步澄清。

希望这有助于。

+0

你能解释一下吗? –

+0

@SonaliShrivastava更新了答案。 – BKSpurgeon