1

我已经使用inherited_resource插件构建了一个应用程序,并且它已准备好投入生产。使用inherited_resources进行缓存

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

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

感谢, 阿贾伊·库马尔摹

回答

0

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

你试过吗?如果这不起作用,请告诉我们您的观点是什么样子的。


编辑:回应评论。

啊好吧,所以一般情况下,如果你使用片段缓存,没有必要不调用控制器动作,因为你不会设置任何变量,如果没有变量,那么为什么你不是使用页面缓存?

为了防止查询被触发,ActiveRecord 3.0与arel是你的朋友。例如,如果你在你的动作中放置了@posts = Post.where(:published => true),那么直到你在视图中调用@ posts.each,它才会被调用,所以如果你把它放在缓存块中,它会永远不会被调用。我不确定默认情况下,inherited_resources会做什么,但鉴于它是由JoséValim编写的,我想他默认会使用ActiveRecord的这个特性,如果不是这样,它很容易定制。您可以通过为开发环境启用缓存并查看日志来查看正在触发的查询来测试它。

+0

你是对的我正在使用片段缓存来缓存视图。但是当请求到达服务器时,我无法阻止控制器代码(和数据库查询)的执行。我正在寻找的是一种优雅的方式,我可以根据缓存来停止正在执行的inherited_resource控制器代码。 – 2011-05-29 16:56:13

+0

我更新了回复以响应此评论。 – gtd 2011-05-29 22:53:21

+0

我想你是对的。 ARel是这里的关键。我确认后会回复。 – 2011-05-30 01:18:39