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

时间:2013-10-17 02:50:04

标签: ruby-on-rails ruby caching random

我想多次调用它并让它返回不同的结果,但(我认为)缓存会导致它反复返回相同的结果:

randomMatchups = Matchup.order("RANDOM()")

我尝试使用:

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

matchup.connection.clear_query_cache

ActiveRecord::Base.connection.clear_query_cache
到目前为止并没有运气。

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

有什么建议吗?

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

1 个答案:

答案 0 :(得分:2)

我相信你的模型上的一个类方法的未缓存应该是这样的:

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

http://api.rubyonrails.org/classes/ActiveRecord/QueryCache/ClassMethods.html#method-i-uncached

修改

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

$.ajax({
  url: "test.html",
  cache: false
})

jQuery将添加一个带有时间戳“_ = {timestamp}”的GET参数,这会阻止浏览器缓存响应。

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

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