ActiveSupport::SecureRandom.hex(50)
Вероятность того, что это не будет уникальным, астрономическая.
Альтернативное простое решение "не масштабировать" условия сбоя гонки.
class MyModel < ActiveRecord::Base
before_create :assign_unique_token
private
def assign_unique_token
self.unique_token = ActiveSupport::SecureRandom.hex(50) until unique_token?
end
def unique_token?
self.class.count(:conditions => {:unique_token => unique_token}) == 0
end
end
Если вы действительно хотите убедиться, создайте уникальный индекс для столбца и обработайте ошибку уникальности БД, повторив попытку, аналогично моей реализации выше.