La mayoría de los ejemplos que he visto que hacen esto terminan contando las filas de la tabla y luego generando un número aleatorio para elegir una. Esto se debe a que alternativas como RAND()
son ineficientes en el sentido de que obtienen cada fila y les asignan un número aleatorio, o eso he leído (y creo que son específicos de la base de datos).
Puede agregar un método como el que encontré aquí .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Esto hará que cualquier modelo que use tenga un método llamado random
que funciona de la manera que describí anteriormente:genera un número aleatorio dentro del recuento de filas en la tabla, luego obtiene la fila asociada con ese número aleatorio. Básicamente, solo estás haciendo una búsqueda, que es lo que probablemente prefieras :)
También puede echar un vistazo a este complemento de rieles .