活动记录真实随机



我有一个非常简单的应用程序,需要(尽可能公平地)随机将一个人分配到团队中。

目前,我正在使用一些不同的方法进行迭代。

Team.where(assigned: false).order("RANDOM()").first

以及将其加载到数组中并使用sample()

arr.sample().inspect

然而,这些看起来并不是真正随机的,它们通常会将边(1,2..8,9,其中count=10)留到最后。有没有更好的方法可以或不涉及AR?PSQLrand和sqlite3random()在数学上有明显的区别吗?

感谢对生成所述随机分布的循环的任何帮助!

尽管可能有更多的方法可以生成随机数来选择记录(甚至是像random.org这样的极端度量),但您提供的随机选择应该是足够的,它们之间几乎没有差异。

然而,如果我是你,我会意识到两者在头顶上的区别;一个应该只从数据库中选择一条记录,另一个则将所有记录拉入内存并随机选择一条。如果Team表变大,可能会导致内存和计算消耗,从而减缓整个计算。第二种方法只有当我需要内存中的整张表用于其他目的时才会使用。

最新更新