2010-07-02 2 views
2

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

Благодаря

+0

Возможный обман: http://stackoverflow.com/questions/831746/how-to-make-model-ids-in-rails-unpredictable-and-random – huntaub

+0

Есть ли причина, по которой вы не можете использовать авто- inc как идентификатор и случайная строка в качестве фильтра? – Fossmo

ответ

2

Я считаю, что вы можете изменить реализацию to_param в моделях, представляющих интерес. Есть более полное объяснение техники here

0

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

base="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" 
(0...10).map{base[rand(base.length)]}.join 
7

Используйте гарантированную случайная строка генератор, 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

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

require 'securerandom' 
require 'base64' 

slug = Base64.encode64(SecureRandom.uuid)[0..10] 
=> "YWVkNzZmYjI" 
=> "MzQxMDkxY2U" 
Смежные вопросы