ecco la soluzione migliore per ottenere record casuale dal database. RoR forniscono tutto in un facile utilizzo.
Per ottenere record casuali da DB utilizzare campione, di seguito è la descrizione per quello con l'esempio.
Backport of Array # campione basato su Marc-Andre Lafortune's github.com/marcandre/backports/ Restituisce un elemento casuale o n elementi casuali dall'array. Se la matrice è vuota e n è nulla, restituisce nil. Se n viene passato e il suo valore è minore di 0, solleva un'eccezione ArgumentError. Se il valore di n è uguale o maggiore di 0 restituisce [].
[1,2,3,4,5,6].sample # => 4
[1,2,3,4,5,6].sample(3) # => [2, 4, 5]
[1,2,3,4,5,6].sample(-3) # => ArgumentError: negative array size
[].sample # => nil
[].sample(3) # => []
È possibile utilizzare la condizione in base alle proprie esigenze come nell'esempio seguente.
User.where (attivo: true) .Sample (5)
tornerà a caso 5 attiva dell'utente da tavolo Utente
Per maggiori informazioni visitare il sito: http://apidock.com/rails/Array/sample
Ho sentito che RAND() è molto lento perché dapprima recupera tutti i record e poi in qualche modo ne sceglie uno, ma probabilmente ho torto. –
@Blaenk: È * molto lento su MySQL. Comunque non so sull'implementazione. – Swanand
+1 per fare uno scope, mi piace anche questo. –