Spl*_*lin 9 hash ruby-on-rails
我在网站上有一个表格,可以从访客那里获取一些个人信息.我将此信息传递给另一个服务,我需要为这些表单中的每一个分配一个100字符的唯一哈希值,以便与记录一起存储在DB中.生成此密钥并确保其唯一的最佳方法是什么?如果键自动递增也没关系.
Aug*_*aas 22
ActiveSupport::SecureRandom.hex(50)
Run Code Online (Sandbox Code Playgroud)
这不是唯一的机会是天文数字.
替代简单的"不缩放"竞争条件失败解决方案.
class MyModel < ActiveRecord::Base
before_create :assign_unique_token
private
def assign_unique_token
self.unique_token = ActiveSupport::SecureRandom.hex(50) until unique_token?
end
def unique_token?
self.class.count(:conditions => {:unique_token => unique_token}) == 0
end
end
Run Code Online (Sandbox Code Playgroud)
如果你真的想确定,在列上创建一个唯一索引,并通过重试处理数据库唯一性错误,类似于我上面的实现.