我想多次调用它并让它返回不同的结果,但(我认为)缓存会导致它反复返回相同的结果:
randomMatchups = Matchup.order("RANDOM()")
我尝试使用:
uncached do
randomMatchups = Matchup.order("RANDOM()")
end
和
matchup.connection.clear_query_cache
和
ActiveRecord::Base.connection.clear_query_cache
到目前为止并没有运气。
请注意,此问题仅出现在生产(Heroku)中,并且在本地运行时不会出现问题。
有什么建议吗?
编辑:为了澄清,当我刷新页面时,我会得到不同的结果,但是当我通过AJAX请求到达控制器时,它不起作用。
答案 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) %>