La plupart des exemples que j'ai vus finissent par compter les lignes du tableau, puis génèrent un nombre aléatoire pour en choisir un. En effet, des alternatives telles que RAND()
sont inefficaces en ce sens qu'ils obtiennent en fait chaque ligne et leur attribuent un nombre aléatoire, du moins ce que j'ai lu (et sont spécifiques à la base de données, je pense).
Vous pouvez ajouter une méthode comme celle que j'ai trouvée ici .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Cela fera en sorte que tout modèle que vous utilisez ait une méthode appelée random
qui fonctionne de la manière que j'ai décrite ci-dessus :génère un nombre aléatoire dans le nombre de lignes de la table, puis récupère la ligne associée à ce nombre aléatoire. Donc, fondamentalement, vous ne faites qu'une seule récupération, ce que vous préférez probablement :)
Vous pouvez également jeter un œil à ce plugin de rails .