小编典典

ActiveRecord 中的随机记录

all

我需要通过 ActiveRecord 从表中获取随机记录。我从 2006 年开始遵循 Jamis
Buck
的示例。

但是,我还通过谷歌搜索遇到了另一种方式(由于新的用户限制,无法使用链接进行归因):

 rand_id = rand(Model.count)
 rand_record = Model.first(:conditions => ["id >= ?", rand_id])

我很好奇这里的其他人是如何做到的,或者是否有人知道哪种方式更有效。


阅读 74

收藏
2022-08-27

共1个答案

小编典典

如果没有至少两个查询,我还没有找到一种理想的方法。

以下使用随机生成的数字(最多为当前记录计数)作为 偏移量

offset = rand(Model.count)

# Rails 4
rand_record = Model.offset(offset).first

# Rails 3
rand_record = Model.first(:offset => offset)

老实说,我一直在使用 ORDER BY RAND() 或 RANDOM() (取决于数据库)。如果您没有性能问题,这不是性能问题。

2022-08-27