De meeste voorbeelden die ik heb gezien die dit doen, eindigen met het tellen van de rijen in de tabel en het genereren van een willekeurig getal om er een te kiezen. Dit komt omdat alternatieven zoals RAND()
zijn inefficiënt omdat ze eigenlijk elke rij krijgen en ze een willekeurig getal toewijzen, of dat heb ik gelezen (en zijn databasespecifiek denk ik).
Je kunt een methode toevoegen zoals die ik hier heb gevonden .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Dit zorgt ervoor dat elk model dat u gebruikt een methode heeft met de naam random
die werkt op de manier die ik hierboven heb beschreven:genereert een willekeurig getal binnen het aantal rijen in de tabel en haalt vervolgens de rij op die bij dat willekeurige getal hoort. Dus eigenlijk doe je maar één ophaalactie en dat is wat je waarschijnlijk liever hebt :)
Je kunt ook een kijkje nemen op deze rails-plug-in .