如何在自定义SQL中使用ActiveRecord查询缓存

Chr*_*Foy 6 activerecord ruby-on-rails query-cache

在Rails应用程序的统计信息部分,我有一些自定义SQL调用,使用模型代码中的ActiveRecord :: Base.execute()调用.他们返回各种聚合.

其中一些(相同的)查询在控制器的循环中运行,似乎它们不会被ActiveRecord查询缓存缓存.

有没有办法在单个请求中缓存自定义SQL查询?

Ela*_*dar 5

不确定AR是否支持#execute的查询缓存,您可能需要深入了解文档.无论如何,你可以做的是使用记忆,这意味着你将手动保留结果,直到当前请求结束.

在你的模型中做这样的事情:

def repeating_method_with_execute
   @rs ||= ActiveRecord::Base.execute(...)
end
Run Code Online (Sandbox Code Playgroud)

这基本上只会在第一次运行查询,然后保存响应,@rs直到整个请求结束.

如果我没有错,Rails 2.x已经有一个memoization在ActiveRecord上命名的宏,可以自动完成所有这些操作

希望能帮助到你