我有一个新手的问题,我无法理解。如何为caches_action
方法执行if条件中的Proc。
例如:
caches_action :show, :if=>Proc.new{|x| something}
我不知道的是如何调用它。 我知道我可以执行一个定义为
的proc proc= Proc.new
by
proc.call
所以我不明白这是怎么调用的。
其次,我如何通过像
这样的条件 if logged_in?
我很感激这方面的帮助
答案 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