A maioria dos exemplos que vi que fazem isso acabam contando as linhas da tabela e gerando um número aleatório para escolher um. Isso ocorre porque alternativas como
RAND()
são ineficientes, pois na verdade obtêm todas as linhas e atribuem a elas um número aleatório, ou então eu li (e acho que são específicas do banco de dados). Você pode adicionar um método como o que encontrei aqui .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Isso fará com que qualquer Model que você use tenha um método chamado
random
que funciona da maneira que descrevi acima:gera um número aleatório dentro da contagem das linhas na tabela e busca a linha associada a esse número aleatório. Então, basicamente, você está fazendo apenas uma busca, que é o que você provavelmente prefere :) Você também pode dar uma olhada em este plugin Rails .