我希望生成一个无法猜测的ID(即长串的随机字符)。
我目前正在使用https://github.com/sporkmonger/uuidtools:
应用程序/助手/ uuidhelper.rb
require 'rubygems'
require 'uuidtools'
module UuidHelper
def before_create()
self.id = UUIDTools::UUID.random_create().to_s
end
end
应用程序/模型/ mymodel.rb
include UuidHelper
然而,这并没有给我预期的效果,即长度总是太短。
有没有办法使用这个来强制更大的值?我应该使用另一种方法吗?
我目前正在使用SQLite作为我的开发数据库。这会产生一些影响吗?
我还假设在将ID分配给新实例之前,我应该检查ID是否已存在?
答案 0 :(得分:1)
您可以使用:
require 'digest/sha1'
#to check if generated id is unique
self.id = Digest::SHA1.hexdigest(DateTime.now.to_s)[0..length-1] while (ModelName.find(self.id))
其中length - 所需的输出UUID长度,你也必须检查它是唯一的(如果长度太小则可能是假的)和ModelName - 模型的名称
答案 1 :(得分:0)
导致问题的是SQLite数据库 - 移动到MySQL数据库并且按预期工作。