【问题标题】:RANDOM() not working in Rails 4.0.2RANDOM() 在 Rails 4.0.2 中不起作用
【发布时间】:2014-02-27 09:07:16
【问题描述】:

我在我的 Rails 4 应用程序中使用以下方法来获取模型中的随机记录:

Model.order('RANDOM()').limit(5)

升级到 Rails 4.0.2 后出现问题。它总是获取最新的记录。任何想法为什么?

【问题讨论】:

  • 呈现的 SQL 查询是什么样的(来自日志)?
  • SELECT "model".* FROM "model" ORDER BY created_at DESC, RANDOM() LIMIT 5
  • Model 上是否有一些您现在不知道的默认订购范围?
  • 默认按created_at DESC排序

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

只需使用Model.all.sample(5)

【讨论】:

  • 这可能适用于非常小的数据集,但如果 Modal.all 返回任何显着数量的行,上述方法将非常低​​效,因为它们都将被返回,对象实例化,然后 Array #sample 随机抽取 5 个。
  • 是的...明白你在说什么。谢谢。
【解决方案2】:

您要么需要从模型中删除默认范围,要么像这样调用它:

Model.unscoped.order('RANDOM()').limit(5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2014-04-29
    • 2015-05-20
    • 2014-07-05
    • 2018-01-30
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多