每次创建记录时,如何生成唯一的顺序ID(在模式之后)?如何解决并发问题?
我希望此ID遵循固定模式。 例如:ABC00001,ABC00002,ABC00003等
我这样做是为了生成学生ID,我希望学院内的学生ID是顺序的。将有多个机构使用我的工具。
答案 0 :(得分:4)
如果您正在使用活动记录,则默认情况下已创建唯一的顺序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"
修改
啊,你没有提到你需要标识符在Institute
内是连续的。你在使用PostgreSQL吗?如果是这样,sequenced gem可能是一个不错的选择 - 它会添加一个acts_as_sequence
方法,允许您执行此操作:
class Student
acts_as_sequenced scope: :institute_id, column: :sequential_id
#...
end
如果您不使用PostgreSQL,您需要找到一种在您选择的数据库系统中处理并发锁的方法,因为gem只适用于postgres(请参阅here了解如何)。< / p>