Rails - 保存的uuid长度短于32个字符

时间:2010-11-09 14:51:49

标签: ruby-on-rails uuid

我希望生成一个无法猜测的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是否已存在?

2 个答案:

答案 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数据库并且按预期工作。