2009-11-29 16 views
9

Tablodaki bir kaydı tanımlayabilmem için bir gereksinimim var, bu durumda bir kullanıcı tablosu, tablodaki kayıtların sıralamasını vermeyen benzersiz bir anahtarla .Bir kaydı tanımlamak için benzersiz rastgele dize oluşturma

Şu anda birincil anahtar alanı ve oluşturulan yolları gibi bakmak:

/users/kfjslncdk 

elimden: Ancak

/users/1 

, şöyle bir rota oluşturmak edebilmek istiyorum Rota tarafı, veritabanı tarafı vb. herşeyi telle bağladım. Ama benzersiz bir dize tanımlayıcısı oluşturmanın en iyi yolunun raylarda ne olacağından emin değilim. Gibi bir şey yapmak istiyorum: Ben UUIDTools kullanılarak oluşturulan bir guid ilk bölümünü kullanabilirsiniz düşünüyordum

before_save :create_unique_identifier 

def create_unique_identifier 
    self.unique_identifier = ... magic goes here ... 
end 

, ama kullanıcıyı kaydetmeden önce eşsizdi emin olmak için kontrol gerekiyordu.

Her türlü öneri çok takdir edilecektir!

cevap

8

Yakut 1.9 includes yerleşik bir UUID jeneratör: SecureRandom.uuid

38
before_create :create_unique_identifier 

def create_unique_identifier 
    loop do 
    self. unique_identifier = SecureRandom.hex(5) # or whatever you chose like UUID tools 
    break unless self.class.exists?(:unique_identifier => unique_identifier) 
    end 
end 
3
kendin kaydet

Karartılmış id depolamasını sorun ve basitçe kimliği kodlamak taban 62 (a-z, A-Z, 0-9) ile ancak özel "basamak" sırasını tanımlar. Bu, siparişi anlamak için onu çok karmaşık hale getirecektir.): I (. Q metnini bakınız) UUID zaten asker tarafından biliniyordu inanıyoruz https://gist.github.com/4058176

İlgili konular