/ / Lepšia cesta k náhodnému výberu (Ruby / Rails 3) [duplikát] - rubín na koľajniciach, rubín, rubín na koľajniciach-3, aktívny záznam, náhodný

Lepšia cesta k náhodnému výberu (Ruby / Rails 3) [duplikát] - rubín na koľajniciach, rubín, rubín na koľajniciach 3, aktívny záznam, náhodné

Momentálne používam:

@users = User.order ("RANDOM ()") limit (6)

aby sa vytvoril zoznam 6 náhodných používateľov - táto metóda však trvá 1200 ms na načítaní stránky. Existuje rýchlejší / efektívnejší spôsob, ako zavolať 6 náhodných používateľov?

odpovede:

1 pre odpoveď č. 1

Na záver som použil tu popísanú metódu: Rails vybrať náhodný záznam

@ramc - Ďakujeme za vašu pripomienku. Doba načítania je teraz oveľa rýchlejšia :)


0 pre odpoveď č. 2

Za predpokladu, že počet ID automaticky sa zvyšuje, počnúc od 0 a objekty užívateľa sa nikdy nevymažú, malo by to byť veľmi rýchle:

@users = (0..5).map { User.find(rand * User.count) }


0 pre odpoveď č. 3

Skúsili ste použiť náhodný offset & limit?

class User < ActiveRecord::Base

def self.random num = 1
num.times.map { offset(rand(count)).limit(1) }
end

end

@users = User.random(6)

Použil som niečo podobné, aby som získal jednotlivé náhodné prípady z AR. Mali by ste to urobiť trochu šikovnejšie, ak by ste chceli zaručiť jedinečné výsledky.


0 pre odpoveď č. 4

Namiesto toho môžete získať náhodnú stránku používateľov. Zvážte toto volanie stránkovania pomocou Kaminari

User.order("created_at").page(rand(User.count)).per(6)

Tým sa spustí jeden počet dopytov a jeden dopyt na stránku 6 používateľov


-2 pre odpoveď č. 5

Môžete sa pokúsiť použiť array shuffle namiesto používania mysql náhodne, pretože to môže byť pomalé:

@users = User.all.shuffle[0..5]

Koniec koncov, zbierka objektov ActiveRecord je stále len pole