caches_action if子句中的proc如何执行

Sid*_*Sid 0 lambda caching ruby-on-rails

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

例如:

caches_action :show, :if=>Proc.new{|x| something}
Run Code Online (Sandbox Code Playgroud)

我不明白的是它是如何被调用的。我知道我可以执行定义为的过程

proc= Proc.new经过 proc.call

所以我不明白这是如何调用的。

其次,我如何通过条件

if logged_in?

如果有任何帮助,我将不胜感激

shi*_*ara 5

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

caches_action :show, :if => Proc.new{|x| x.logged_in? }
Run Code Online (Sandbox Code Playgroud)

该过程在过滤器之前调用。一个caches_action就像一个before_filter。该过滤器检查是否已经有关于该操作的缓存。除非,缓存已生成。

使用:if过滤器时,仅当调用 if 时才调用过滤器。所以过程是调用的。如果您不使用 Proc,则:if仅在服务器启动时读取文件期间解释该值。