Rails 中随机化数据模型的有效方法

Efficient way to randomize data model in Rails

根据对象模型中的视频创建节目表。 我想每天 运行 一个任务来洗牌这个模型,这样每天的编程都会不同。

我知道 product.shuffle.all 例如。但我希望每天保存一次订单,而不是在每次服务器调用时保存一次。

我正在考虑为每个产品添加一个名为 order 的属性,它是一个用于订购的整数。在这种情况下,我如何为所有产品随机播放 product.order?

这是最有效的方法吗?感谢您的帮助!

我认为你想做的事情最好结合 gem paper_trail 以及你的 product.shuffle.all 和对数据库的 update_attributes 调用.这样您就可以在数据库中更新时查看过去的版本。

您可以使用 shufflerandom 参数。它允许稳定的随机化:

# When the Random object's seed is different, multiple runs result in different outcome:

pry(main)> [1,2,3,4,5,6,7].shuffle(random: Random.new)
=> [5, 6, 3, 4, 1, 7, 2]
pry(main)> [1,2,3,4,5,6,7].shuffle(random: Random.new)
=> [1, 7, 6, 4, 5, 3, 2]


# When the Random object is created with the same seed, multiple runs return the same result:

pry(main)> [1,2,3,4,5,6,7].shuffle(random: Random.new(1))
=> [7, 3, 2, 1, 5, 4, 6]
pry(main)> [1,2,3,4,5,6,7].shuffle(random: Random.new(1))
=> [7, 3, 2, 1, 5, 4, 6]

通过基于种子,例如根据一年中的天数,您可以确定结果随机化何时发生变化。如果需要,您可以(显然)恢复任何给定日期的随机化。