Mira la API para SecureRandom: http://rails.rubyonrails.org/classes/ActiveSupport/SecureRandom.html
Creo que usted está buscando una método diferente: #random_number.
SecureRandom.random_number(a_big_number)
Desde #hex devuelve un número hexadecimal, sería inusual para pedir un resultado aleatorio que contenía sólo caracteres numéricos.
Para casos de uso básico, es bastante simple de usar #rand.
rand(9999)
Editado:
No estoy al tanto de una biblioteca que genera un número aleatorio de longitud especificada, pero parece lo suficientemente simple para escribir uno. Aquí está mi pase en él:
def rand_by_length(length)
rand((9.to_s * length).to_i).to_s.center(length, rand(9).to_s).to_i
end
El #rand_by_length método toma una longitud Especificación de número entero como un parámetro y trata de generar un número aleatorio de dígitos max en base a la longitud. String # center se usa para rellenar los números faltantes con números aleatorios. El peor caso llama #rand para cada dígito de longitud especificada. Eso puede servir a tu necesidad.
Gracias por la corrección en el "número hexadecimal" Me gustaría explicarlo aún más, en realidad estaba buscando un número al azar con una longitud específica (deja ay 8), el hexadecimal restringe la longitud, por lo que se pregunta algo similar, es posible que SecureRandom genere solo números. SecureRandom.random_number (n) probablemente no permitirá esto? [random_number] (http://rails.rubyonrails.org/classes/ActiveSupport/SecureRandom.html#M000733) – swapab
Actualicé mi respuesta en función de su comentario. – rossta
Eso es genial ... Muchas gracias por ese código ... – swapab