在Ruby on Rails中为每个用户分配一个唯一的100个字符哈希

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)

如果你真的想确定,在列上创建一个唯一索引,并通过重试处理数据库唯一性错误,类似于我上面的实现.

  • 在3.1以上的Rails中,这变成了"SecureRandom.hex(50)". (3认同)