我需要通过ActiveRecord从表中获取一条随机记录.我从Jamis Buck from 2006开始就遵循了这个例子.

然而,我也通过谷歌搜索找到了另一种方式(由于新的用户限制,无法使用链接进行属性设置):

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

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

推荐答案

如果没有至少两个查询,我还没有找到一个理想的方法来实现这一点.

下面使用随机生成的数字(直到当前记录计数)作为offset.

offset = rand(Model.count)

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

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

老实说,我刚刚使用了ORDER BY RAND()或RANDOM()(取决于数据库).如果没有性能问题,这不是性能问题.

Ruby-on-rails相关问答推荐

在Ruby on rails中,重复访问ActiveRecordModel返回相同的对象:预期行为还是错误?

在Ruby on Rails中获取堆栈级别太深错误(&Q)

查询Where Date.parse Rails

Rails - 如何从模型中查询 has_many

计算总价(商品数量*商品价格)

Rails 3 中图像路径的完整 url

如何避免 has_many :through 关系中的重复?

Phusion 乘客(适合傻瓜!)

单击表格行(使用 bootstrap 程序)时,如何使用模式显示数据?

是否有与 PHP 的 isset() 等效的 Rails?

为什么我要使用 unicorn 或 thin 而不是 WEBrick 用于开发目的?

如何让空白复选框作为假传递给参数

Rails:从视图内渲染视图(不是部分视图)

rails回形针和乘客`'识别'命令无法识别`

将图标添加到 Rails 应用程序

Groovy/Grails :: Ruby/Rails :: 2011 框架状态

从 Rails 中的 ActiveRecord::RecordNotFound 救援

设计:为什么我的注销链接不起作用?

我的 JavaScript 模式/实践很糟糕.我应该go 哪里寻求帮助?

如何拆分长行的 Ruby