在方法中生成唯一代码

时间:2013-10-01 18:11:22

标签: ruby-on-rails ruby-on-rails-4

我看过很多Railscasts(感谢Ryan),我需要回忆一下我在其中一个中看到的代码,但我的问题是我记不清哪里可以找到它。

我可以使用下面的代码生成一个5位数的代码,这可以在方法中找到:

5.times.map { [*'A'..'Z'].sample }.join

但是我需要能够在保存之前确保它是唯一的。我记得Ryan在模型方法中使用某种循环来检查它在保存之前是否是唯一的。

你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

http://railscasts.com/episodes/274-remember-me-reset-password是您要查找的页面:

def generate_token(column)
  begin
    self[column] = SecureRandom.urlsafe_base64
  end while User.exists?(column => self[column])
end

因此,您可以使用自己的代码替换SecureRandom.urlsafe_base64部分。

答案 1 :(得分:1)

首先,用SecureRandom.hex(5)

替换你的东西

然后我得到了你想要的东西,我敢打赌:

value   = true
while value
  random = SecureRandom.hex(5)
  value  = Model.where(column: random).exists?
end
#here you have an unique `random`