uuid = Digest::SHA256.digest(SecureRandom.uuid)
id = Base62.encode(uuid)
没有将 String 隐式转换为 Integer
线= id = Base62.encode(uuid)
我认为您的代码不会起作用。原因如下:
Base62.encode(num)
接受一个 base10 数字并将其转换为 base62 字符串。这对你来说是个问题:
Digest::SHA256.digest(SecureRandom.uuid)
# => "\e\x1F\xD6yby\x02o\f)\xA2\x91\xD4\xFB\x85jd\xE0\xF7\xECtd\x8E\xA6\x9Ez\x99\xD8>\x04\nT"
返回一个字符串。
如果您查看base62-rb
gem 中的代码以及方法上方的注释,您可以看到它正在将字符串与整数进行比较,这是我尝试复制此代码时遇到的错误:
ArgumentError: comparison of String with 0 failed
这是gem中的方法:
# From base62-rb.rb line 8-20:
# Encodes base10 (decimal) number to base62 string.
def self.encode(num)
return "0" if num == 0
return nil if num < 0
str = ""
while num > 0
# prepend base62 charaters
str = KEYS[num % BASE] + str
num = num / BASE
end
str
end
base62-rb
当然,所有这一切都基于您使用gem的事实。所以,也许你可以给我们一些背景信息,让我们知道你尝试了什么?
用于将字符串传递给 base62
uuid = SecureRandom.uuid.gsub("-", "").hex
@id = uuid.base62_encode