Rails - длина сохраненного uuid не превышает 32 символа - PullRequest
1 голос
/ 09 ноября 2010

Я ищу сгенерированный идентификатор, который нельзя угадать (то есть длинную строку случайных символов).

Я сейчас использую https://github.com/sporkmonger/uuidtools:

приложение / хелперы / uuidhelper.rb

require 'rubygems'
require 'uuidtools'
module UuidHelper
  def before_create()
    self.id = UUIDTools::UUID.random_create().to_s
  end
end

приложение / модели / mymodel.rb

include UuidHelper

Однако, это не дает мне желаемого эффекта, то есть длина всегда слишком коротка.

Есть ли способ использовать адаптировать это, чтобы форсировать большие значения? Есть ли другой подход, который я должен использовать?

В настоящее время я использую SQLite для своей базы данных разработки. Может ли это иметь какой-то эффект?

Я также предполагаю, что должен проверить, существует ли идентификатор, прежде чем присвоить его новому экземпляру?

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Вы можете использовать:

require 'digest/sha1'
#to check if generated id is unique
self.id = Digest::SHA1.hexdigest(DateTime.now.to_s)[0..length-1] while (ModelName.find(self.id))

где длина - желаемая длина выходного UUID, также вы должны проверить, чтобы он был уникальным (который может быть ложным, если длина слишком мала) и ModelName - имя вашей модели

0 голосов
/ 06 декабря 2010

Проблема возникла из-за базы данных SQLite - она ​​была перемещена в базу данных MySQL и работает как положено.

...