Rails / ActiveRecord - 查找N个随机项

时间:2013-04-04 03:16:12

标签: ruby-on-rails ruby activerecord

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

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

任何帮助将不胜感激!

2 个答案:

答案 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