Enregistrement aléatoire dans ActiveRecord

Je suis dans le besoin d'obtenir un enregistrement aléatoire à partir d'une table via ActiveRecord. J'ai suivi l'exemple de Jamis Buck à partir de 2006.

Cependant, j'ai aussi trouver un autre moyen via une recherche Google (ne peut pas d'un attribut avec un lien grâce à de nouvelles restrictions de l'utilisateur):

 rand_id = rand(Model.count)
 rand_record = Model.first(:conditions => ["id >= ?", rand_id])

Je suis curieux de voir comment d'autres ici l'ont fait ou si quelqu'un sait de quelle manière, ce serait plus efficace.

  • 2 points qui pourraient aider à une réponse. 1. Comment uniformément distribués sont vos identifiants, sont-ils séquentielle? 2. Comment aléatoire t-il besoin d'être? Bon assez aléatoires, réel ou aléatoire?
  • Ils sont séquentiels id généré automatiquement par activerecord et il a juste à être assez bon.
  • Ensuite, votre solution proposée est proche de l'idéal 🙂 j'aimerais utiliser "SELECT MAX(id) from table_name" au lieu de COUNT(*) comme il traitera de lignes supprimées un peu mieux, sinon, le reste est très bien. En bref, si "suffisamment bonne" est ok, alors vous avez juste à avoir une méthode qui suppose une distribution proche de ce que vous avez réellement. Si c'est uniforme, et même, comme vous l'avez dit, simple rand fonctionne très bien.
  • Cela ne fonctionne pas lorsque vous avez supprimé des lignes.
InformationsquelleAutor jyunderwood | 2010-05-02