ruby-on-rails - Ruby on Rails Active Record RANDOM() 在一个循环中总是相同的

标签 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,因此它与循环有关。我有什么不明白的?

最佳答案

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

关于ruby-on-rails - Ruby on Rails Active Record RANDOM() 在一个循环中总是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583074/

相关文章:

ruby-on-rails - 使用 Carrierwave 上传到多个 S3 存储桶

ruby-on-rails - 无模型的 rails 形式

ruby - 在 Ruby 代码中将 "require"放在哪里?

javascript - for 循环参数在 JavaScript 中无法正常工作

javascript - Reactjs 中的嵌套循环返回简单的 ListItem - -Object.values 和 Object.keys

ruby-on-rails - 在 rails 中构建博客——如何限制文本并放置 "read more"链接以显示帖子的其余部分?

mysql - 使用 ActiveRecord 解释 COUNT 查询

ruby-on-rails - Rails 图像 Assets 不显示在 Heroku 上

ruby-on-rails - AWS_S3 ruby​​ gem 超时错误执行过期

C# - 如何创建不可检测的无限循环?