【问题标题】:Caching with inherited_resources使用inherited_resources 进行缓存
【发布时间】:2011-05-13 19:13:07
【问题描述】:

我已经使用inherited_resource 插件构建了一个应用程序,并准备好投入生产。

现在我正在寻找为同一个应用程序实现缓存的方法。由于我有一些依赖于 current_user 的页面片段,我将使用片段缓存机制。

有人可以向我提供一个指针或资源,它有助于为基于继承资源的视图和控制器实现片段缓存吗?

谢谢, 阿杰·库马尔 G

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 caching fragment inherited-resources


    【解决方案1】:

    我不使用inherited_resources,但我的理解是它只是控制器的快捷方式。您的视图应该是标准的,在这种情况下,您可以使用 Rails 指南中所述的片段缓存http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching

    你试过吗?如果这不起作用,请向我们展示您的观点。


    编辑:回复评论。

    啊,好吧,所以一般来说,如果您使用片段缓存,那么不调用控制器操作是没有意义的,因为您不会设置任何变量,如果没有变量,那么您为什么不使用页面缓存?

    为了防止查询被触发,带有 arel 的 ActiveRecord 3.0 是你的朋友。例如,如果您将 @posts = Post.where(:published => true) 放在您的操作中,那么在您在视图中调用 @posts.each 之前它不会被调用,因此如果您将它放在缓存块中,它将永远不会被调用。我不确定默认情况下inherited_resources 会做什么,但鉴于它是由José Valim 编写的,我想他会默认使用ActiveRecord 的该功能,如果不是很容易定制的话。您可以通过为您的开发环境打开缓存并查看日志以查看正在触发的查询来对其进行测试。

    【讨论】:

    • 你是对的,我正在使用片段缓存来缓存视图。但是当请求到达服务器时,我无法阻止控制器代码(和数据库查询)被执行。我正在寻找的是一种优雅的方式,我可以在其中停止基于缓存执行的继承资源控制器代码
    • 我猜你是对的。 ARel 是这里的关键。确认后我会回复。
    猜你喜欢
    • 2017-02-25
    • 2015-04-04
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2021-11-27
    • 2014-10-15
    • 2020-01-27
    相关资源
    最近更新 更多