2013-04-04 21 views
2

我有以下的在我的模型最基本的代碼返回一個隨機事件:的Rails/ActiveRecord的 - 找到N個隨機物品

def self.random 
    Event.first(:offset => rand(Event.count)) 
end 

我想修改的功能,因此它返回ň數事件。

我知道first可以採取一個數字作爲參數,即Event.first(2),但如何將它與隨機偏移?

I.e.像這樣的東西

def self.random(n = 1) 
    Event.first(n) # and offset??!! 
end 

任何幫助,將不勝感激!

+0

參見[在ActiveRecord的隨機記錄(http://stackoverflow.com/questions/2752231/random-record-in-activerecord)。特別是,我更喜歡使用[randumb](https://github.com/spilliton/randumb)寶石。 – 2013-04-04 04:50:11

回答

2

儘管Stuarts方法本身完美,但它不能與許多其他ActiveRecord作用域進行鏈接。我找到了另一種方法(使用偏移),與鏈接的作品:

​​
2

這應爲返回n隨機記錄工作:

def self.random(n = 1) 
    Event.order("RANDOM()").limit(n) 
end 

limit方法實際上是由first調用的時候你給它一個整數作爲第一個參數,所以你也可以,如果你使用.first(n)代替.limit(n)喜歡。

根據數據庫系統的不同,您可能需要替換RAND()而不是RANDOM(),請參閱文檔以獲取確切的方法。