นี่คือสิ่งที่ฉันใช้ โทเค็นไม่จำเป็นต้องได้ยินเพื่อคาดเดามันเป็นเหมือนตัวระบุ URL แบบสั้นมากกว่าสิ่งอื่นใดและฉันต้องการให้มันสั้น ฉันได้ติดตามตัวอย่างที่ฉันพบทางออนไลน์และในกรณีที่มีการปะทะกันฉันคิดว่ารหัสด้านล่างจะสร้างโทเค็นใหม่ แต่ฉันไม่แน่ใจจริง ๆ ฉันอยากรู้ว่าจะเห็นคำแนะนำที่ดีกว่านี้ได้อย่างไรเนื่องจากมันรู้สึกหยาบเล็กน้อยรอบ ๆ ขอบ
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
คอลัมน์ฐานข้อมูลของฉันสำหรับโทเค็นเป็นดัชนีที่ไม่ซ้ำกันและฉันยังใช้validates_uniqueness_of :token
กับโมเดล แต่เพราะสิ่งเหล่านี้ถูกสร้างขึ้นในแบทช์โดยอัตโนมัติตามการกระทำของผู้ใช้ในแอป (พวกเขาสั่งซื้อและซื้อโทเค็นเป็นหลัก) เป็นไปไม่ได้ที่แอพจะมีข้อผิดพลาดเกิดขึ้น
ฉันก็สามารถเดาได้ว่าเพื่อลดโอกาสในการชนเพิ่มสตริงใหม่ในตอนท้ายสิ่งที่สร้างขึ้นตามเวลาหรืออะไรทำนองนั้น แต่ฉันไม่ต้องการให้โทเค็นยาวเกินไป