我的模型中有以下基本代码来返回随机事件:
def self.random
Event.first(:offset => rand(Event.count))
end
我想修改该函数,以便返回 N 个事件数。
我知道first
可以将数字作为参数,即Event.first(2)
,但如何将其与随机偏移相结合?
即。像这样的东西
def self.random(n = 1)
Event.first(n) # and offset??!!
end
任何帮助将不胜感激!
答案 0 :(得分:2)
这应该适用于返回n
随机记录:
def self.random(n = 1)
Event.order("RANDOM()").limit(n)
end
limit
方法实际上由first
调用,当您将Integer作为第一个参数时,如果您愿意,也可以使用.first(n)
代替.limit(n)
根据您的数据库系统,您可能需要替换RAND()
而不是RANDOM()
,请参阅文档以了解具体方法。
答案 1 :(得分:2)
虽然Stuarts方法本身可以很好地工作,但它不能与许多其他ActiveRecord范围链接。我找到了另一种与链接一起使用的方法(使用偏移量):
def self.random(number = 1)
Event.offset(rand(Event.count - number+1)).first(number)
end