İşte kullandığım. Jetonun tahmin edilmesi zorunlu olarak duyulmak zorunda değil, daha çok her şeyden daha kısa bir url tanımlayıcısı gibi ve kısa tutmak istiyorum. Çevrimiçi bulduğum bazı örnekleri takip ettim ve bir çarpışma durumunda, aşağıdaki kodun jetonu yeniden oluşturacağını düşünüyorum , ancak gerçek emin değilim. Yine de, daha iyi öneriler görmeyi merak ediyorum, çünkü bu kenarlarda biraz pürüzlü hissediyor.
def self.create_token
random_number = SecureRandom.hex(3)
"1X#{random_number}"
while Tracker.find_by_token("1X#{random_number}") != nil
random_number = SecureRandom.hex(3)
"1X#{random_number}"
end
"1X#{random_number}"
end
Jeton için veritabanı sütunum benzersiz bir dizin ve ben de validates_uniqueness_of :token
model üzerinde kullanıyorum , ancak bunlar uygulamadaki kullanıcının eylemlerine göre otomatik olarak gruplar halinde oluşturulduğundan (bir sipariş verir ve jetonları satın alırlar), uygulama bir hata atmak mümkün değil.
Ayrıca, çarpışma olasılığını azaltmak, sonunda başka bir dize, zamana veya bunun gibi bir şeye dayalı olarak üretilen bir şey ekleyebilirim, ancak jetonun çok uzun sürmesini istemiyorum.