Die meisten Beispiele, die ich gesehen habe, die dies tun, enden damit, die Zeilen in der Tabelle zu zählen und dann eine Zufallszahl zu generieren, um eine auszuwählen. Dies liegt daran, dass Alternativen wie RAND()
sind ineffizient, da sie tatsächlich jede Zeile abrufen und ihnen eine Zufallszahl zuweisen, habe ich jedenfalls gelesen (und sind, glaube ich, datenbankspezifisch).
Sie können eine Methode wie die, die ich gefunden habe, hier hinzufügen .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Dadurch hat jedes von Ihnen verwendete Modell eine Methode namens random
Das funktioniert so, wie ich es oben beschrieben habe:generiert eine Zufallszahl innerhalb der Anzahl der Zeilen in der Tabelle und ruft dann die Zeile ab, die dieser Zufallszahl zugeordnet ist. Im Grunde machst du also nur einen Abruf, was du wahrscheinlich bevorzugst :)
Sie können sich auch dieses Rails-Plugin ansehen .