Sebagian besar contoh yang saya lihat yang melakukan ini akhirnya menghitung baris dalam tabel, kemudian menghasilkan nomor acak untuk memilih satu. Ini karena alternatif seperti RAND()
tidak efisien karena mereka benar-benar mendapatkan setiap baris dan memberi mereka nomor acak, atau begitulah yang saya baca (dan menurut saya spesifik untuk basis data).
Anda dapat menambahkan metode seperti yang saya temukan di sini .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Ini akan membuatnya jadi Model apa pun yang Anda gunakan memiliki metode yang disebut random
yang bekerja dengan cara yang saya jelaskan di atas:menghasilkan angka acak dalam hitungan baris dalam tabel, lalu mengambil baris yang terkait dengan angka acak itu. Jadi pada dasarnya, Anda hanya melakukan satu pengambilan yang mungkin Anda sukai :)
Anda juga dapat melihat plugin rails ini .