6

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

其中一些(相同的)查询在控制器中循环运行,并且似乎它们没有被 ActiveRecord 查询缓存缓存。

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

4

1 回答 1

5

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

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

def repeating_method_with_execute
   @rs ||= ActiveRecord::Base.execute(...)
end

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

如果我没记错的话,Rails 2.x 已经有一个名为memoizationActiveRecord 的宏,它会自动完成所有这些工作

希望能帮助到你

于 2010-10-14T11:31:02.100 回答