-2
uuid = Digest::SHA256.digest(SecureRandom.uuid)
id = Base62.encode(uuid)

没有将 String 隐式转换为 Integer

线= id = Base62.encode(uuid)

4

2 回答 2

0

我认为您的代码不会起作用。原因如下:

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-rbgem 中的代码以及方法上方的注释,您可以看到它正在将字符串与整数进行比较,这是我尝试复制此代码时遇到的错误:

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的事实。所以,也许你可以给我们一些背景信息,让我们知道你尝试了什么?

于 2017-04-13T21:47:16.653 回答
0

用于将字符串传递给 base62

uuid = SecureRandom.uuid.gsub("-", "").hex
@id = uuid.base62_encode
于 2017-04-14T20:28:05.700 回答