【发布时间】:2013-10-15 14:31:24
【问题描述】:
我正在使用它来选择一个随机匹配,我测试它的结果,并绘制一个随机匹配直到它满足while循环的标准:
m = Matchup.order("RANDOM()").first
循环10个循环后设置为break(避免无限循环),我会随意跳出循环,查看日志,每次循环都看到Matchup都一样.循环的简化版本是这样的:
counter = 0
while counter < 5
m = Matchup.order("RANDOM()").first
logger.debug('Matchup ID: ' + m.id)
counter += 1
end
日志将如下所示:
Matchup ID: 7
Matchup ID: 7
Matchup ID: 7
Matchup ID: 7
Matchup ID: 7
为什么m = Matchup.order("RANDOM()").first 不会随意拉出不同的比赛?最奇怪的部分是,有时它可以毫无问题地工作,而另一些则陷入循环 b/c m 没有改变。有什么建议吗?
如果您想查看实际的循环,可以在此处查看(在getRandomMatchup 函数中):
https://github.com/jackerman09/wdis/blob/master/app/controllers/static_pages_controller.rb
【问题讨论】:
-
@Davidann 在 PostgreSQL 中是
RANDOM()。 -
不过,在这种情况下,失败的可能性太小,无法在测试中经常看到。相反,我希望涉及查询缓存。可能有一些语法告诉 Postgres 不要使用它。
-
或者可能是 Active Record 缓存(而不是 Postgres)。
-
@jackerman09 我自己并不真正了解 Rails,但也许是这样:coderwall.com/p/tvybhq
标签: ruby-on-rails ruby arrays loops random