从 ActiveRecord 集合对象中随机抽样?

Randomly sample from ActiveRecord collection object?

假设我们有一些 class

@physician.availabilities.class
=> Availability::ActiveRecord_Associations_CollectionProxy

@physician.availabilities.length
=> 72

我们如何从该对象中随机抽样记录?

例如这看起来很有希望

@physician.availabilities.sample(5)

除了

@physician.availabilities.sample(5).class
=> Array

而我想重新训练一个 ActiveRecord 对象(所以我可以 .save 随机样本而不是其他样本)

您可以在两个查询中执行此操作。

ids = @physician.availabilities.sample(5).pluck(:id)
@physician.availabilities.where(id: ids)

这也可以通过 RANDOM

使用 Postgres
@physician.availabilities.order('RANDOM()').limit(5)

...或者如果您喜欢 MySQL 和 RAND

@physician.availabilities.order('RAND()').limit(5)