Ruby on rails Rails—保存的uuid';的长度小于32个字符

Ruby on rails Rails—保存的uuid';的长度小于32个字符,ruby-on-rails,uuid,Ruby On Rails,Uuid,我希望生成一个不可猜测的ID(即随机字符的长字符串) 我目前正在使用: app/helpers/uuidheloper.rb require 'rubygems' require 'uuidtools' module UuidHelper def before_create() self.id = UUIDTools::UUID.random_create().to_s end end app/models/mymodel.rb include UuidHelper 然而,这

我希望生成一个不可猜测的ID(即随机字符的长字符串)

我目前正在使用:

app/helpers/uuidheloper.rb

require 'rubygems'
require 'uuidtools'
module UuidHelper
  def before_create()
    self.id = UUIDTools::UUID.random_create().to_s
  end
end
app/models/mymodel.rb

include UuidHelper
然而,这并没有给我想要的效果,即长度总是太短

有没有一种方法可以使用adapt来强制更大的值?我是否应该使用另一种方法

我目前正在使用SQLite作为我的开发数据库。这会有什么影响吗

我还假设在将ID分配给新实例之前,我应该检查ID是否已经存在?

您可以使用:

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的所需长度,您还必须检查它是否唯一(如果长度太小,则可能为false)以及ModelName—您的模型名称,您可以使用:

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))

where length—输出UUID的所需长度,还必须检查它是否唯一(如果长度太小,则可能为false)和ModelName-您的模型的名称

是SQLite数据库导致问题-移动到MySQL数据库并按预期工作。

是SQLite数据库导致问题-移动到MySQL数据库并按预期工作。

多长时间?根据这个例子,它应该看起来像:984265dc-4200-4f02-ae70-FE4F48964159我可以问一下为什么需要非顺序ID吗?您不能将多个UUID附加在一起,直到获得所需的长度吗?您要的字符串长度是多少?此工具似乎输出32个字符的标准UUID。UUID的假设是它是普遍唯一的。您必须检查用于生成此特定UUID的方法,以确认这是一个正确的假设。检查一下你是否有疑问可能没什么坏处。“我得到的输出是74819,0,64,24672”,嗯?DGM是正确的,UUID应该看起来像“984265dc-4200-4f02-ae70-fe4f48964159”。宇宙的热死应该发生在碰撞之前很久。这看起来你抓取的不是实际的UUID。我猜您的主键的字段类型是错误的,SQLite数据库驱动程序太宽容了,而不是冲您大喊大叫。多长时间?根据这个例子,它应该看起来像:984265dc-4200-4f02-ae70-FE4F48964159我可以问一下为什么需要非顺序ID吗?您不能将多个UUID附加在一起,直到获得所需的长度吗?您要的字符串长度是多少?此工具似乎输出32个字符的标准UUID。UUID的假设是它是普遍唯一的。您必须检查用于生成此特定UUID的方法,以确认这是一个正确的假设。检查一下你是否有疑问可能没什么坏处。“我得到的输出是74819,0,64,24672”,嗯?DGM是正确的,UUID应该看起来像“984265dc-4200-4f02-ae70-fe4f48964159”。宇宙的热死应该发生在碰撞之前很久。这看起来你抓取的不是实际的UUID。我猜您的主键的字段类型是错误的,SQLite数据库驱动程序过于宽容而不是对您大喊大叫。我在这里也得到了类似的输出,例如74819、0、64、2、4672、1和冲突。我在这里也得到了类似的输出,例如74819、0、64、2、4672、1和冲突。