Ruby on Rails Active Record RANDOM()在循环中始终相同

为什么这会重复输出相同的记录ID,何时应该在每个循环迭代中抓取一个随机记录?

count = 0 while count < 20 puts "ID: " + SomeModel.where(assoc_id: 10).order("RANDOM()").limit(1).first.id.to_s count += 1 end 

输出:

 ID: 82784 ID: 82784 ID: 82784 ID: 82784 ID: 82784 

我已经确保查询有足够的记录(即超过1)。 在控制台中,行本身(在循环之外)每次都会返回一个新的ID,因此它与循环有关。 我不明白的是什么?

我相信这是因为ActiveRecord缓存而发生的。 您可以阅读此博客文章,了解与您的问题及其解决方案非常相似的内容。 简而言之,他们(和你)可以使用ActiveRecords未缓存的方法来看不到重复。