2009-11-29 27 views
9

Tôi có yêu cầu để có thể xác định bản ghi trong bảng, trong trường hợp này là bảng người dùng, bằng khóa duy nhất không cung cấp thứ tự các bản ghi trong bảng .Tạo chuỗi ngẫu nhiên duy nhất để xác định hồ sơ

Hiện nay tôi có trường tiểu học trọng và các tuyến đường được tạo ra trông giống như:

/users/1 

Tuy nhiên, tôi muốn để có thể tạo ra một tuyến đường như:

/users/kfjslncdk 

tôi có thể dây tất cả mọi thứ lên trên phía đường, bên cơ sở dữ liệu vv .. nhưng tôi không chắc chắn cách tốt nhất để tạo ra một định danh chuỗi duy nhất sẽ được trong đường ray. Tôi muốn làm điều gì đó như:

before_save :create_unique_identifier 

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

Tôi đã suy nghĩ tôi có thể sử dụng phần đầu của một guid tạo sử dụng UUIDTools, nhưng tôi cần phải kiểm tra để chắc chắn rằng nó là duy nhất trước khi lưu người dùng.

Bất kỳ lời khuyên nào sẽ được đánh giá rất nhiều!

Trả lời

8

của Ruby 1,9 includes một built-in phát UUID: 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

Lưu mình những rắc rối từ lưu trữ các id obfuscated và đơn giản mã hóa id với cơ sở 62 (a-z, A-Z, 0-9) nhưng tùy chỉnh xác định thứ tự của "chữ số". Điều này sẽ làm cho nó rất phức tạp để tìm ra thứ tự.

Tôi đã từng viết một cái gì đó một lớp nào đó (có thể cần một số refactoring): https://gist.github.com/4058176

Các vấn đề liên quan