Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何清除缓存以使连续的随机查询返回不同的结果?_Ruby On Rails_Ruby_Caching_Random - Fatal编程技术网

Ruby on rails 如何清除缓存以使连续的随机查询返回不同的结果?

Ruby on rails 如何清除缓存以使连续的随机查询返回不同的结果?,ruby-on-rails,ruby,caching,random,Ruby On Rails,Ruby,Caching,Random,我想多次调用它,让它返回不同的结果,但是(我认为)缓存导致它一次又一次返回相同的结果: randomMatchups = Matchup.order("RANDOM()") 我尝试使用: uncached do randomMatchups = Matchup.order("RANDOM()") end 及 及 到目前为止都没有运气 请注意,此问题仅在生产(Heroku)中出现,在本地运行时不是问题 有什么建议吗 编辑:澄清一下,我在刷新页面时会得到不同的结果,但是当我通过AJAX请

我想多次调用它,让它返回不同的结果,但是(我认为)缓存导致它一次又一次返回相同的结果:

randomMatchups = Matchup.order("RANDOM()")
我尝试使用:

uncached do
    randomMatchups = Matchup.order("RANDOM()")
end

到目前为止都没有运气

请注意,此问题仅在生产(Heroku)中出现,在本地运行时不是问题

有什么建议吗


编辑:澄清一下,我在刷新页面时会得到不同的结果,但是当我通过AJAX请求到达控制器时,它就不起作用了。

我相信,模型上的类方法uncached应该是这样工作的:

randomMatchups = Matchup.uncached do
  Matchup.order("RANDOM()")
end

编辑:

我看到您的编辑带有另一个可能的解决方案。您的浏览器可能正在缓存响应。如果您使用的是jQuery,请将cache选项设置为false

$.ajax({
  url: "test.html",
  cache: false
})
jQuery将添加一个带有时间戳“={timestamp}”的GET参数,这将阻止浏览器缓存响应

如果您不使用jQuery,请寻找等效的解决方案,或者自己添加一个时间戳:

 <%= foo_path(timestamp: Time.now.to_f) %>


RANDOM()+N
其中N是一个随机数可以解决这个问题吗?可能会,但在请求之间我应该在哪里存储该数字?为什么要存储它?这里的想法是,如果这是问题的话,就破坏缓存。如果刷新和AJAX调用的结果不同,请仔细查看
log/development.log
,以查看正在运行的查询的确切内容。@jackerman09我已经补充了我的答案,以涵盖AJAX缓存。这可能是Heroku的事情,因为在那里部署应用程序的方式与正常情况略有不同。您应该尝试在本地复制它,可能使用一个带有生产环境的VM。我尝试了这个,结果导致随机匹配为零。你知道为什么会这样吗?
$.ajax({
  url: "test.html",
  cache: false
})
 <%= foo_path(timestamp: Time.now.to_f) %>