2

caches_action我见过的每一个例子如下:集caches_action,:expires_in =>动态

caches_action, :expires_in => 5.minutes 

但我想基于动作使用的对象的到期时间设定expires_in。在设置expires_in时有没有什么办法引用该对象,因为有问题的对象是基于params发送给该操作的?

我尝试使用

caches_action, :expires_in => Object.find(params[:id]) 

,但可惜它不会让我参考一下PARAMS那里。建议欢迎!

回答

2

看起来你需要使用一个Proc,它可以通过控制器的params。这里是一个例子

caches_action :show, cache_path: Proc.new {|controller_instance| "some_cache_path_that_is_uniq/#{controller_instance.params[:id]}"} 
0

动作高速缓存的主要目的是防止每次有新的请求进入时执行动作。除非明确定义了明确的参数,否则不予考虑。

如果你想缓存基于实例,我会建议做Conditional Gets

+0

我的'params [:id]'是路由的一部分 - 类似'/ object /:id' - 因此它被分开缓存,因为路径是不同的。 – swrobel 2012-03-01 18:48:55