生成唯一的顺序 ID

use*_*969 2 ruby-on-rails

每次创建记录时,如何生成唯一的顺序 ID(遵循模式)?如何解决并发问题?

我希望此 ID 遵循固定模式。例如:ABC00001、ABC00002、ABC00003等

我这样做是为了生成学生 ID,我希望学院内的学生 ID 是连续的。将有多个机构使用我的工具。

omn*_*ron 6

如果您使用的是活动记录,那么id默认情况下已经创建了一个唯一的顺序 ID ( ) 并为您处理所有并发问题。如果您需要将它用于查询,那么单独的列可能是前进的方向,但如果您只需要以某种格式显示它,您可以简单地在模型上定义一个方法,例如:

class MyModel
  def my_unique_id
    "ABC%.5d" % id
  end
end

test = MyModel.create
test.id #=> 1
test.my_unique_id #=> "ABC00001"

test2 = MyModel.create
test2.id #=> 2
test2.my_unique_id #=> "ABC00002"
Run Code Online (Sandbox Code Playgroud)

编辑

啊,您没有提到您需要标识符在Institute. 你在使用 PostgreSQL 吗?如果是这样,排序的 gem可能是一个不错的选择——它添加了一个acts_as_sequence允许你这样做的方法:

class Student
  acts_as_sequenced scope: :institute_id, column: :sequential_id
  #...
end
Run Code Online (Sandbox Code Playgroud)

如果您不使用 PostgreSQL,则需要在您选择的数据库系统中找到一种处理并发锁的方法,因为 gem 仅适用于 postgres(有关方法,请参见此处)。