在Ruby on Rails中使用随机字符串作为id?

时间:2010-07-02 12:51:21

标签: ruby-on-rails

我想在Ruby on Rails中创建一个类似于http://www.pastebin.com/的Web应用程序。 pastebin.com使用随机字符串来标识项目。 Ruby on Rails使用自动递增数字。如何使Ruby on Rails也使用这些随机字符串作为项目的ID,而不是自动递增数字?

由于

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

我相信你可以在感兴趣的模型中覆盖to_param的实现。对here

技术有更全面的解释

答案 2 :(得分:2)

对于香草红宝石

require 'securerandom'
require 'base64'

slug = Base64.encode64(SecureRandom.uuid)[0..10]
=> "YWVkNzZmYjI" 
=> "MzQxMDkxY2U"

答案 3 :(得分:0)

生成一个随机字符串作为键并将其放入db表中?确保密钥是uniq?

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