Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Rails seleciona registro aleatório


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 .