生成用于标识记录的唯一随机字符串
问题描述:
我有一个要求,能够通过唯一的键来标识表中的记录(在本例中为用户表),该唯一键不会泄露表中记录的排序。生成用于标识记录的唯一随机字符串
目前,我有主键字段和所生成的路线是这样的:
/users/1
不过,我希望能够产生类似的路线:
/users/kfjslncdk
我可以在线路端,数据库端等一切线上,但我不知道生成一个唯一的字符串标识符的最佳方式是在轨道上。我想这样做:
before_save :create_unique_identifier
def create_unique_identifier
self.unique_identifier = ... magic goes here ...
end
我想我可以用用UUIDTools创建一个GUID的第一部分,但我需要检查,以确保它是保存用户之前唯一的。
任何意见将不胜感激!
答
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
我相信UUID已经由提问者已知的(见问题文本。))。但为第三个链接+1。 – Abel 2009-11-29 00:43:03