Лучший способ создать уникальный токен в Rails?

Вот что я использую. Токен не обязательно нужно слышать, чтобы угадать, это скорее короткий идентификатор 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 на модель, но поскольку они создаются автоматически в пакетах на основе действий пользователя в приложении (по сути, они размещают заказ и покупают токены), невозможно, чтобы приложение выдало ошибку.

Я также мог бы, Думаю, чтобы уменьшить вероятность коллизий, добавьте в конце еще одну строку, что-то сгенерированное на основе времени или что-то в этом роде, но я не хочу, чтобы токен становился слишком длинным.

153
задан Sachin Gevariya 17 December 2014 в 06:23
поделиться