De fleste af de eksempler, jeg har set, der gør dette, ender med at tælle rækkerne i tabellen og derefter generere et tilfældigt tal for at vælge en. Dette skyldes, at alternativer såsom RAND()
er ineffektive, idet de faktisk får hver række og tildeler dem et tilfældigt tal, eller det har jeg læst (og er databasespecifik, tror jeg).
Du kan tilføje en metode som den, jeg fandt her .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Dette vil gøre det så enhver model, du bruger, har en metode kaldet random
som fungerer på den måde, jeg beskrev ovenfor:genererer et tilfældigt tal inden for antallet af rækker i tabellen, og henter derefter rækken, der er knyttet til det tilfældige tal. Så dybest set laver du kun én hentning, hvilket er hvad du sandsynligvis foretrækker :)
Du kan også tage et kig på dette rails-plugin .