在 Rails 应用程序的统计信息部分,我有一些自定义 SQL 调用,这些调用是使用模型代码中的 ActiveRecord::Base.execute() 调用的。他们返回各种聚合。
其中一些(相同的)查询在控制器中循环运行,并且似乎它们没有被 ActiveRecord 查询缓存缓存。
有没有办法在单个请求中缓存自定义 SQL 查询?
在 Rails 应用程序的统计信息部分,我有一些自定义 SQL 调用,这些调用是使用模型代码中的 ActiveRecord::Base.execute() 调用的。他们返回各种聚合。
其中一些(相同的)查询在控制器中循环运行,并且似乎它们没有被 ActiveRecord 查询缓存缓存。
有没有办法在单个请求中缓存自定义 SQL 查询?
不确定 AR 是否支持#execute 的查询缓存,您可能需要深入研究文档。无论如何,您可以做的是使用记忆,这意味着您将手动保留结果,直到当前请求结束。
在你的模型中做这样的事情:
def repeating_method_with_execute
@rs ||= ActiveRecord::Base.execute(...)
end
这基本上只会在第一次运行查询,然后将响应保存到@rs
整个请求结束。
如果我没记错的话,Rails 2.x 已经有一个名为memoization
ActiveRecord 的宏,它会自动完成所有这些工作
希望能帮助到你