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