如何执行caches_action if子句中的proc

时间:2010-04-01 13:55:59

标签: ruby-on-rails caching lambda

我有一个新手的问​​题,我无法理解。如何为caches_action方法执行if条件中的Proc。

例如:

caches_action :show, :if=>Proc.new{|x| something}

我不知道的是如何调用它。 我知道我可以执行一个定义为

的proc

proc= Proc.new by proc.call

所以我不明白这是怎么调用的。

其次,我如何通过像

这样的条件

if logged_in?

我很感激这方面的帮助

2 个答案:

答案 0 :(得分:4)

Proc上的参数传递是当前对象。所以在你的例子中它是x变量。所以你可以调用这个实例的所有方法。如果您想调用logged_in?方法。你可以,因为它是一个公共实例

caches_action :show, :if => Proc.new{|x| x.logged_in? }

proc是在过滤器之前调用的。 caches_action就像before_filter。此过滤器检查是否已存在有关此操作的缓存。除非,生成缓存。

使用:if时,只有在调用if时才会调用过滤器。所以proc就是召唤。如果您不使用Proc,则:if值仅在服务器启动时读取文件期间解释。

答案 1 :(得分:0)

:if => proc { logged_in? }

我的理解是你发送一个块进行评估。因此,如果您在帮助程序或控制器logged_in中有方法,它将调用它并进行评估。我相信它是调用proc的控制器类。

来自文件; “如果给出了一个块,则使用当前控制器实例调用它。”

http://api.rubyonrails.org/classes/ActionController/Caching/Actions.html