gpt4 book ai didi

ruby-on-rails - 如何随机化 `ActiveRecord::Relation` 的数组元素位置?

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:13 26 4
gpt4 key购买 nike

我正在运行 Ruby on Rails 3.2.2,我想随机化 ActiveRecord::Relation 的数组元素位置

我该怎么做?

最佳答案

您总是可以将 .order('random()') 添加到关系中:

ar = Model.where(...).where(...).order('random()')

您甚至可以将其添加为范围:

class Model < ActiveRecord::Base
scope :randomize, order('random()')
end

有几点需要注意:

  1. PostgreSQL 和 SQLite 使用 random(),MySQL 使用 rand(),我不确定其他数据库。
  2. ORDER BY random() 在数据库中可能非常昂贵,因此您不想使用它,除非您的 WHERE 子句(即 .where 调用)会限制您将应用 ORDER BY random() 的结果集的大小。
  3. .limit 将在 ORDER BY 之后应用 x.limit(n).order('random()')会将 ORDER BY 应用于所有 x,然后在排序后应用 limit(n)。这就是 (2) 中警告的来源。

关于ruby-on-rails - 如何随机化 `ActiveRecord::Relation` 的数组元素位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9697133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com