De flesta av de exempel jag har sett som gör detta slutar med att man räknar raderna i tabellen och genererar sedan ett slumptal för att välja en. Detta beror på att alternativ som RAND()
är ineffektiva eftersom de faktiskt får varje rad och tilldelar dem ett slumpmässigt nummer, eller så har jag läst (och är databasspecifika tror jag).
Du kan lägga till en metod som den jag hittade här .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Detta kommer att göra det så att alla modeller du använder har en metod som heter random
som fungerar på det sätt jag beskrev ovan:genererar ett slumptal inom antalet rader i tabellen och hämtar sedan raden som är associerad med det slumptalet. Så i princip gör du bara en hämtning vilket är vad du förmodligen föredrar :)
Du kan också ta en titt på denna rails-plugin .