隨機挑資料庫某一筆資料的方式大概有這兩種:
def self.random
# find(rand count) rescue ActiveRecord::RecordNotFound random
find(:first)[rand count]
end第一種先隨機挑,找不到拋出例外再去Rescue例外並挑下一筆,等於跑一個遞迴;第二種是先把全部挑出來,再利用ActiveRecord傳回陣列的特性,從陣列隨機挑一筆。
除非運氣太差,要不很顯然第一種方式快;但第二種語法比較精簡。我個人比較喜歡第二種精簡的方式。
要注意呼叫rand傳回的亂數是從0開始,但資料庫的ID沒有特別設定都是從1開始,第一種方式改成這樣:
find(rand(count) + 1) rescue ActiveRecord::RecordNotFound random可以保證不會挑到第0筆而再跑一次;但無論如何,就算多跳幾次也應該比第二種方式快,所以加不加1無所謂。
無論採用哪種方式,ActiveRecord都是一種看起來簡單,卻蘊含豐富的變化資料封裝處理,非常討人喜歡啊。
