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ď č. 1Na 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