我想与控制器以下显示随机用户:Rails的缓存“随机”查询
@random_user = User.where(is_admin: false).order('RAND()').first
但每次我刷新页面时,同一用户获取每次所示。我如何告诉rails在页面的每次刷新时重新运行此查询?
更新
尴尬修复:问题是在模型中default_scope。通过在查询中使用.unscoped
进行修复。
我想与控制器以下显示随机用户:Rails的缓存“随机”查询
@random_user = User.where(is_admin: false).order('RAND()').first
但每次我刷新页面时,同一用户获取每次所示。我如何告诉rails在页面的每次刷新时重新运行此查询?
更新
尴尬修复:问题是在模型中default_scope。通过在查询中使用.unscoped
进行修复。
您可以使用或尝试sample
@random_user = User.where(is_admin: false).sample
这将返回随机用户。
你问数据库
可能是:
例如
scope = User.where(is_admin: false)
count = scope.count
user = scope.offset(rand(count)).limit(1)
这很尴尬:问题是模型中的默认范围。
做一个unscoped
查询修复它。
据我所知你正在使用一些sql数据库。
要获取随机记录,你可以使用不同的方式,他们都在不同的情况下很好地工作。在小表
User.where(is_admin: true).limit(5).order("RAND()").first
2)快速在中等大小的表(offset
)
User.where(is_admin: false).limit(1).offset(rand(User.count)).first
3)只要例如
User.where(is_admin: false).sample
更新
1)快速足够
我认为其中一件重要的事情,你必须记住,每个orm
查询将被翻译成sql
。所以你必须分析会发生什么under the hood
。
PS:我不明白问题标题是如何与问题相关的?)
如果您使用的是MSSQL,另一种方法是您可以生成一个几乎随机的GUID的ORDER BY NEWID() 。
使用take
方法:
@random_user = User.where(is_admin: false).take
干杯