我的模型中有以下基本代码用于返回随机事件:
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
任何帮助,将不胜感激!
我的模型中有以下基本代码用于返回随机事件:
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
任何帮助,将不胜感激!
这应该适用于返回n
随机记录:
def self.random(n = 1)
Event.order("RANDOM()").limit(n)
end
当您将 Integer 作为第一个参数时,该limit
方法实际上会被调用,因此如果您愿意,也可以使用而不是。first
.first(n)
.limit(n)
您可能需要替换RAND()
而不是RANDOM()
取决于您的数据库系统,请参阅文档以获取确切的方法。
虽然 Stuarts 方法本身可以完美运行,但它不能与许多其他 ActiveRecord 范围链接。我找到了另一种适用于链接的方法(使用偏移量):
def self.random(number = 1)
Event.offset(rand(Event.count - number+1)).first(number)
end