我的模型中有以下基本代码用于返回随机事件:
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