Ruby on Rails Active Record RANDOM()在循环

时间:2016-01-03 23:59:57

标签: ruby-on-rails ruby loops activerecord

为什么重复输出相同的记录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,因此它与循环有关。我不理解的是什么?

1 个答案:

答案 0 :(得分:4)

我认为这是因为 ActiveRecord缓存而发生的。您可以阅读this blog post关于与您的问题及其解决方案非常相似的内容。简而言之,他们(和你)可以利用ActiveRecords uncached method来看不到重复。