Większość przykładów, które widziałem, kończy się liczeniem wierszy w tabeli, a następnie generowaniem losowej liczby, aby wybrać jedną. Dzieje się tak, ponieważ alternatywy, takie jak RAND()
są nieefektywne, ponieważ faktycznie pobierają każdy wiersz i przypisują im losową liczbę, a przynajmniej tak czytałem (i myślę, że są specyficzne dla bazy danych).
Możesz dodać metodę podobną do tej, którą znalazłem tutaj .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
To sprawi, że każdy używany model będzie miał metodę o nazwie random
który działa w sposób opisany powyżej:generuje liczbę losową w ramach liczby wierszy w tabeli, a następnie pobiera wiersz powiązany z tą liczbą losową. Więc w zasadzie robisz tylko jedno pobieranie, co prawdopodobnie wolisz :)
Możesz także rzucić okiem na tę wtyczkę rails .