2

我的模型中有以下基本代码用于返回随机事件:

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

任何帮助,将不胜感激!

4

2 回答 2

2

这应该适用于返回n随机记录:

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

当您将 Integer 作为第一个参数时,该limit方法实际上会被调用,因此如果您愿意,也可以使用而不是。first.first(n).limit(n)

您可能需要替换RAND()而不是RANDOM()取决于您的数据库系统,请参阅文档以获取确切的方法。

于 2013-04-04T03:23:57.757 回答
2

虽然 Stuarts 方法本身可以完美运行,但它不能与许多其他 ActiveRecord 范围链接。我找到了另一种适用于链接的方法(使用偏移量):

  def self.random(number = 1)
    Event.offset(rand(Event.count - number+1)).first(number)
  end
于 2013-04-16T06:53:41.667 回答