Ruby on rails 生成唯一的序列id

Ruby on rails 生成唯一的序列id,ruby-on-rails,Ruby On Rails,如何在每次创建记录时生成唯一的顺序ID(遵循模式)?如何解决并发问题 我希望这个ID遵循固定的模式。 e、 g:ABC00001、ABC00002、ABC00003等 我这样做是为了生成学生ID,我希望学院内的学生ID是连续的。将有多个机构使用我的工具。如果您使用的是active record,则默认情况下已创建唯一的顺序id(id),并为您解决所有并发问题。如果您需要将其用于查询,则单独的列可能是前进的方向,但如果您只需要以某种格式显示它,您可以在模型上定义一个方法,如: class MyMo

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

我希望这个ID遵循固定的模式。 e、 g:ABC00001、ABC00002、ABC00003等


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

如果您使用的是active record,则默认情况下已创建唯一的顺序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"
编辑

啊,你没有提到你需要标识符在
研究所
中按顺序排列。你在使用PostgreSQL吗?如果是这样的话,这可能是一个很好的选择–它添加了一个
acts\u as\u sequence
方法,允许您执行以下操作:

class Student
  acts_as_sequenced scope: :institute_id, column: :sequential_id
  #...
end

如果您不使用PostgreSQL,您需要在您选择的数据库系统中找到一种处理并发锁的方法,因为gem只为Postgre服务(请参见了解如何操作)。

我实际上是在生成学生ID,我希望学院内的学生ID是连续的。将有多个机构使用我的工具。如果我使用上述方法,则学院内的学生不保证获得顺序ID。@user1175969如果您使用postgres,您可能会很幸运(请参阅我的编辑)。否则,您需要研究如何在您使用的任何数据库系统中锁定表。sequence gem源代码是寻找灵感的好地方。我正在使用postgres。非常感谢!