生成唯一的顺序ID

时间:2016-12-20 15:40:46

标签: ruby-on-rails

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

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

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

1 个答案:

答案 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>