在Rails 3中生成唯一的32个字符的字符串

问题描述

| 我有一个具有app_id和secret_key字段的应用程序模型。生成唯一app_id的最佳方法是什么? 我可以使用
ActiveSupport:SecureRandom.hex(16)
来生成32个字符的字母数字字符串,并且可能不会再有其他类似的字符串了。如果以此方式进行,我是否还应该进行数据库检查以查看是否存在重复的app_id或此步骤是否不必要,因为这样做的可能性极小? 还是有更好的方法? 谢谢! 提姆     

解决方法

可以肯定的是,我总是会仔细检查。在
app_id
上放置一个唯一索引,它已设置好。很难保证唯一性 但是,您可以构建一个保证唯一的字符串。
string = ActiveSupport::SecureRandom.hex(16)
append = @app.id.to_s
string = string.slice(0,string.length - append.length) + append
因此,第一部分是随机的,但它总是以数据库id列结尾,该列必须是唯一的。 可能还会有一些变化来保持随机的外观结构,例如使用凯撒密码或简单的数字到字母密码。     ,我先检查一下。 这是我在设计中看到的一些代码,用于生成唯一令牌(针对您的示例进行了修改):
loop do
  token = ActiveSupport::SecureRandom.hex 16
  break token unless find(:first,:token => token)
end
162行: https://github.com/plataformatec/devise/blob/master/lib/devise/models/authenticatable.rb     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...