我目前使用:更好的方式隨機化(的Ruby/Rails 3)
@users = User.order( 「RANDOM()」)的限制(6)
到。生成6個隨機用戶的列表 - 但是,此方法在頁面加載時間上需要1200毫秒的收費。有沒有更快/更有效的方式來調用6個隨機用戶?
我目前使用:更好的方式隨機化(的Ruby/Rails 3)
@users = User.order( 「RANDOM()」)的限制(6)
到。生成6個隨機用戶的列表 - 但是,此方法在頁面加載時間上需要1200毫秒的收費。有沒有更快/更有效的方式來調用6個隨機用戶?
我結束了使用這裏所描述的方法的一個頁面查詢: Rails select random record
@ramc - 感謝您的評論。加載時間現在快得多:)
假設自動遞增的ID,從0開始和用戶對象不會被刪除,下面應該是相當快:
@users = (0..5).map { User.find(rand * User.count) }
另外,如果緩存User.count的結果會更快。爲了簡潔和清晰起見,不包括在內。 – Redbeard
^h你試過使用隨機偏移量&限制嗎?
class User < ActiveRecord::Base
def self.random num = 1
num.times.map { offset(rand(count)).limit(1) }
end
end
@users = User.random(6)
我已經使用了類似的東西從AR獲得單個隨機實例。如果你想保證獨特的結果,你必須做得更聰明一點。
您可以改爲隨機選擇一個用戶頁面。考慮使用Kaminari
User.order('created_at').page(rand(User.count)).per(6)
這這個分頁調用將觸發一個計數的查詢和6個用戶
類似於http://stackoverflow.com/questions/2279706/select-random-row-from-an-sqlite-table/4740561#4740561? – captainpete
你有沒有考慮過這個問題:http://stackoverflow.com/questions/3641057/rails-select-random-record/3641112#3641112 – dexter