2016-07-05 45 views
0

我想与控制器以下显示随机用户:Rails的缓存“随机”查询

@random_user = User.where(is_admin: false).order('RAND()').first 

但每次我刷新页面时,同一用户获取每次所示。我如何告诉rails在页面的每次刷新时重新运行此查询?

更新

尴尬修复:问题是在模型中default_scope。通过在查询中使用.unscoped进行修复。

回答

1

您可以使用或尝试sample@random_user = User.where(is_admin: false).sample这将返回随机用户。

1

你问数据库

  1. 分类所有用户(这可能是大量的工作),然后
  2. 选择第一个。
更好

可能是:

  1. 选择一个随机数少于选择的用户数量。
  2. 然后抓住那个用户。

例如

scope = User.where(is_admin: false) 
count = scope.count 
user = scope.offset(rand(count)).limit(1) 
0

这很尴尬:问题是模型中的默认范围。

做一个unscoped查询修复它。

1

据我所知你正在使用一些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:我不明白问题标题是如何与问题相关的?)

0

如果您使用的是MSSQL,另一种方法是您可以生成一个几乎随机的GUID的ORDER BY NEWID() 。

0

使用take方法:

@random_user = User.where(is_admin: false).take

干杯