生成用于标识记录的唯一随机字符串

问题描述:

我有一个要求,能够通过唯一的键来标识表中的记录(在本例中为用户表),该唯一键不会泄露表中记录的排序。生成用于标识记录的唯一随机字符串

目前,我有主键字段和所生成的路线是这样的:

/users/1 

不过,我希望能够产生类似的路线:

/users/kfjslncdk 

我可以在线路端,数据库端等一切线上,但我不知道生成一个唯一的字符串标识符的最佳方式是在轨道上。我想这样做:

before_save :create_unique_identifier 

def create_unique_identifier 
    self.unique_identifier = ... magic goes here ... 
end 

我想我可以用用UUIDTools创建一个GUID的第一部分,但我需要检查,以确保它是保存用户之前唯一的。

任何意见将不胜感激!

+0

我相信UUID已经由提问者已知的(见问题文本。))。但为第三个链接+1。 – Abel 2009-11-29 00:43:03

Ruby 1.9的includes内置的UUID发电机:SecureRandom.uuid

before_create :create_unique_identifier 

def create_unique_identifier 
    loop do 
    self. unique_identifier = SecureRandom.hex(5) # or whatever you chose like UUID tools 
    break unless self.class.exists?(:unique_identifier => unique_identifier) 
    end 
end 

保存自己从存储混淆ID的麻烦,简单地编码该ID与基地62(a-z,A-Z,0-9),但自定义“数字”的顺序。这将使得弄清订单变得非常复杂。

我曾经写过的东西的类,它是(可能需要一些重构):https://gist.github.com/4058176