2

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

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

我尝试使用:

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

matchup.connection.clear_query_cache

ActiveRecord::Base.connection.clear_query_cache

到目前为止还没有运气。

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

有什么建议么?

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

4

1 回答 1

2

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

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

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

编辑:

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

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

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

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

 <%= foo_path(timestamp: Time.now.to_f) %>
于 2013-10-17T03:40:52.167 回答