我目前正在使用:
@users = User.order(“RANDOM()”)。limit(6)
生成一个包含6个随机用户的列表 - 但是,此方法在页面加载时间上需要1200毫秒的费用。是否有更快/更有效的方式来呼叫6个随机用户?
答案 0 :(得分:1)
我最终使用了此处描述的方法: Rails select random record
@ramc - 感谢您的评论。加载时间现在要快得多:)
答案 1 :(得分:0)
假设自动增量ID,从0开始并且永远不会删除User对象,以下内容应该非常快:
@users = (0..5).map { User.find(rand * User.count) }
答案 2 :(得分:0)
您是否尝试过使用随机偏移量&限制?
class User < ActiveRecord::Base
def self.random num = 1
num.times.map { offset(rand(count)).limit(1) }
end
end
@users = User.random(6)
我使用类似的东西从AR中获取单个随机实例。如果你想保证独特的结果,你必须让它变得更聪明。
答案 3 :(得分:0)
您可以获得一个随机的用户页面。请使用Kaminari
考虑此分页调用User.order('created_at').page(rand(User.count)).per(6)
这将触发一个计数查询和一个查询6个用户的页面
答案 4 :(得分:-2)
您可以尝试使用数组shuffle而不是使用mysql random,因为它可能很慢:
@users = User.all.shuffle[0..5]
毕竟,ActiveRecord对象的集合仍然只是一个数组