Использовать случайную строку в качестве идентификатора в Ruby on Rails? - PullRequest
2 голосов
/ 02 июля 2010

Я хочу создать веб-приложение, подобное http://www.pastebin.com/ в Ruby on Rails. pastebin.com использует случайную строку для идентификации элемента. Ruby on Rails использует автоинкрементное число. Как я могу сделать так, чтобы Ruby on Rails также использовал эти случайные строки в качестве идентификаторов элементов вместо автоматически увеличивающихся чисел?

Спасибо

Ответы [ 4 ]

7 голосов
/ 21 февраля 2011

Используйте гарантированный генератор случайных строк, закодируйте его в base64, а затем сократите до чего-то приемлемого (8 символов?)

require 'uuidtools'
require 'base64'
uid = UUIDTools::UUID.random_create
Base64.encode64(uid)[0..7]
=> "Y2I2ZTQ5"

В Rails вы будете изменять маршруты для загрузки на основе столбца :slugи установите это значение, используя что-то вроде этого:

before_create do
  self.slug = Base64.encode64(UUIDTools::UUID.random_create)[0..8]
end
2 голосов
/ 30 марта 2014

Для ванильного рубина

require 'securerandom'
require 'base64'

slug = Base64.encode64(SecureRandom.uuid)[0..10]
=> "YWVkNzZmYjI" 
=> "MzQxMDkxY2U"
2 голосов
/ 02 июля 2010

Полагаю, вы можете переопределить реализацию to_param в интересующих моделях.Более полное объяснение техники здесь

0 голосов
/ 21 февраля 2011

генерировать случайную строку в качестве ключа и поместить ее в таблицу базы данных?убедитесь, что ключ уникален?

base="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
(0...10).map{base[rand(base.length)]}.join
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...