我需要生成一个尚未使用的随机9位数字。
这是我现在拥有的方式,并且它的工作非常完美,但是当桌子增长时,这可能会太棒了:
while true
random_number = 9.times.map{rand(9)}.join
found = Document.find_by(dfe_number: random_number)
return random_number if found.nil?
end
有更好的方法吗?还是更快的方式?谢谢大家。
答案 0 :(得分:0)
我假设您希望使用唯一的随机Document
保存dfe_number
的新实例。
在这种情况下,你应该采取一种“乐观”的方法,假设碰撞是非常不可能的。
因此你应该:
documents.dfe_number
dfe_number
'%09d' % rand(10 ** 9)
ActiveRecord::RecordNotUnique
并重试 P.S。:您应该确保Document
实例的预期数量小于10 ** 10的数量级,或者如果无法保证,则使用更多的数字。