Ruby on rails 生成唯一的序列id
如何在每次创建记录时生成唯一的顺序ID(遵循模式)?如何解决并发问题 我希望这个ID遵循固定的模式。 e、 g:ABC00001、ABC00002、ABC00003等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是连续的。将有多个机构使用我的工具。如果您使用的是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。非常感谢!