2013-04-04 32 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(),请参阅文档以获取确切的方法。