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

jon*_*nii 10 ruby-on-rails

我要求能够通过一个唯一的密钥来识别表中的记录,在本例中是一个用户表,该密钥不会泄露表中记录的顺序.

目前我有主键字段,生成的路由如下所示:

/users/1
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够生成如下路线:

/users/kfjslncdk
Run Code Online (Sandbox Code Playgroud)

我可以在路由端,数据库端等连接所有内容.但我不确定生成唯一字符串标识符的最佳方法是在rails中.我想做点什么:

before_save :create_unique_identifier

def create_unique_identifier
    self.unique_identifier = ... magic goes here ...
end
Run Code Online (Sandbox Code Playgroud)

我以为我可以使用使用UUIDTools创建的guid的第一部分,但是我需要检查以确保它在保存用户之前是唯一的.

任何建议将不胜感激!

Adi*_*ghi 47

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
Run Code Online (Sandbox Code Playgroud)


NAR*_*KOZ 8

Ruby 1.9 包含一个内置的UUID生成器:SecureRandom.uuid