我正在构建一个推荐系统,当用户创建帐户时,该系统将随机生成一个包含六个字符的字符串。
为此,我使用了宝石uniquify:
class User < ApplicationRecord
uniquify :random_string, length: 6
end
例如,它会创建一个像这样的字符串:"Ed3x7W"
。
即使可能性很小,我也想找到一种方法来确保100%保证每个创建的字符串都是唯一的。
实现此目标的最佳方法是什么?
答案 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。