La maggior parte degli esempi che ho visto in questo modo finiscono per contare le righe nella tabella, quindi generare un numero casuale per sceglierne uno. Questo perché alternative come RAND()
sono inefficienti in quanto ottengono effettivamente ogni riga e assegnano loro un numero casuale, o almeno così ho letto (e credo siano specifici del database).
Puoi aggiungere un metodo come quello che ho trovato qui .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Questo farà in modo che qualsiasi modello che usi abbia un metodo chiamato random
che funziona nel modo descritto sopra:genera un numero casuale all'interno del conteggio delle righe nella tabella, quindi recupera la riga associata a quel numero casuale. Quindi, in pratica, stai facendo solo un recupero che è quello che probabilmente preferisci :)
Puoi anche dare un'occhiata a questo plug-in rails .