/ / Besserer Weg zum Randomisieren (Ruby / Rails 3) [Duplikat] - Ruby-on-Rails, Ruby, Ruby-on-Rails-3, Aktiverecord, zufällig

Bessere Möglichkeit zum Randomisieren (Ruby / Rails 3) [Duplizieren] - Ruby-On-Rails, Ruby, Ruby-On-Rails-3, ActiveRecord, Random

Ich verwende derzeit:

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

Um eine Liste mit 6 zufälligen Benutzern zu erstellen, erfordert diese Methode eine Gebühr von 1200 ms für die Ladezeiten der Seite. Gibt es eine schnellere / effizientere Möglichkeit, 6 zufällige Benutzer anzurufen?

Antworten:

1 für die Antwort № 1

Ich habe die hier beschriebene Methode verwendet: Rails wählen einen zufälligen Datensatz

@ramc - Vielen Dank für Ihren Kommentar. Ladezeiten sind jetzt viel schneller :)


0 für die Antwort № 2

Unter der Annahme von Auto-Inkrement-IDs, die von 0 ausgehen und Benutzerobjekte niemals gelöscht werden, sollte Folgendes sehr schnell sein:

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


0 für die Antwort № 3

Haben Sie es mit einem zufälligen Offset & Limit versucht?

class User < ActiveRecord::Base

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

end

@users = User.random(6)

Ich habe etwas Ähnliches verwendet, um einzelne zufällige Instanzen von AR zu erhalten. Sie müssen es etwas intelligenter machen, wenn Sie einzigartige Ergebnisse garantieren möchten.


0 für die Antwort № 4

Sie könnten stattdessen eine zufällige Seite von Benutzern erhalten. Betrachten Sie diesen Seitenaufruf mit Kaminari

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

Dadurch werden eine Zählerabfrage und eine Abfrage für die Seite mit 6 Benutzern ausgelöst


-2 für die Antwort № 5

Sie können versuchen, Array-Shuffle anstelle von mysql random zu verwenden, da dies langsam sein kann:

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

Immerhin ist eine Sammlung von ActiveRecord-Objekten nur ein Array