Повечето от примерите, които съм виждал, които правят това, в крайна сметка преброяват редовете в таблицата, след което генерират произволно число, за да изберете едно. Това е така, защото алтернативи като RAND()
са неефективни, тъй като всъщност получават всеки ред и им присвояват произволно число, или поне така прочетох (и според мен са специфични за базата данни).
Можете да добавите метод като този, който намерих тук .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Това ще направи така, че всеки модел, който използвате, има метод, наречен random
който работи по начина, който описах по-горе:генерира произволно число в рамките на броя на редовете в таблицата, след което извлича реда, свързан с това произволно число. Така че по принцип правите само едно извличане, което вероятно предпочитате :)
Можете също да разгледате този плъгин за rails .