确保随机生成的字符串是唯一的

时间:2019-02-28 12:43:36

标签: ruby-on-rails ruby

我正在构建一个推荐系统,当用户创建帐户时,该系统将随机生成一个包含六个字符的字符串。

为此,我使用了宝石uniquify

class User < ApplicationRecord
  uniquify :random_string, length: 6
end

例如,它会创建一个像这样的字符串:"Ed3x7W"

即使可能性很小,我也想找到一种方法来确保100%保证每个创建的字符串都是唯一的。

实现此目标的最佳方法是什么?

3 个答案:

答案 0 :(得分:6)

该宝石确实会制造some checks,可为您提供95%以上的保证 *

如果您想100%确定,请在该列上创建一个唯一索引。


*我凭空拿出那个号码。但是,除非正在进行大量并发活动,否则您应该很安全。

答案 1 :(得分:2)

您可以使用SecureRandom.hex(3)或base64 SecureRandom.urlsafe_base64(4)来代替gem。

添加唯一索引验证或在模型中为该字段添加验证。

答案 2 :(得分:1)

使用c:\Windows\System32\Drivers\etc\hosts(您必须做一个Set,然后将每个String输入到Set中。生成String后,查看它是否在Set中,如果存在,则生成一个新的String。