【问题标题】:How to use ActiveRecord Query Cache with Custom SQL如何将 ActiveRecord 查询缓存与自定义 SQL 一起使用
【发布时间】:2011-04-25 01:47:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby-on-rails activerecord query-cache


    【解决方案1】:

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

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

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

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

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

    希望对你有帮助

    【讨论】:

    • 我需要@@class_variables,但除此之外,这正是我想要的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多