Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4,动作缓存,为什么即使在缓存时动作仍然运行_Ruby On Rails_Ruby On Rails 4_Caching - Fatal编程技术网

Ruby on rails Rails 4,动作缓存,为什么即使在缓存时动作仍然运行

Ruby on rails Rails 4,动作缓存,为什么即使在缓存时动作仍然运行,ruby-on-rails,ruby-on-rails-4,caching,Ruby On Rails,Ruby On Rails 4,Caching,我有两个简单控制器的实现 在第一个实现中,每件事情都可以正常工作,只有当缓存丢失时,才会执行ActionShow。 但我知道在缓存操作过程中设置object@page是个坏主意 这就是为什么我有第二个实现,它看起来更好。 它也可以工作并返回缓存视图。 但是,我不明白为什么在使用过滤器之前使用,即使缓存命中,操作show仍在执行。在日志中我看到当前时间 你能解释一下为什么吗? 求你了 实施1 class Frontend::StaticPagesController < Frontend::

我有两个简单控制器的实现

在第一个实现中,每件事情都可以正常工作,只有当缓存丢失时,才会执行ActionShow。 但我知道在缓存操作过程中设置object@page是个坏主意

这就是为什么我有第二个实现,它看起来更好。 它也可以工作并返回缓存视图。 但是,我不明白为什么在使用过滤器之前使用
,即使缓存命中,操作
show
仍在执行。在日志中我看到当前时间

你能解释一下为什么吗? 求你了

实施1

class Frontend::StaticPagesController < Frontend::FrontendController

  caches_action :show, :cache_path => Proc.new {
    @page = StaticPage.find_in_cache(params[:permalink])
    {key: "#{@page.cache_key}-#{I18n.locale}"}
  }

  def show
    logger.debug Time.now.to_s.yellow
  end

end
class Frontend::StaticPagesControllerProc.new{
@page=StaticPage.find_在_缓存中(params[:permalink])
{key:{@page.cache{u key}-{I18n.locale}}
}
def秀
logger.debug Time.now.to_.yellow
结束
结束
实施2

class Frontend::StaticPagesController < Frontend::FrontendController

  before_filter :set_page, :show

  caches_action :show, :cache_path => Proc.new {
    {key: "#{@page.cache_key}-#{I18n.locale}"}
  }

  def show
    logger.debug Time.now.to_s.yellow
  end

  def set_page
    @page = StaticPage.find_in_cache(params[:permalink])
  end

end
class Frontend::StaticPagesControllerProc.new{
{key:{@page.cache{u key}-{I18n.locale}}
}
def秀
logger.debug Time.now.to_.yellow
结束
def设置页面
@page=StaticPage.find_在_缓存中(params[:permalink])
结束
结束
p.S.轨道“4.2.3”

这条线路

before_filter :set_page, :show
定义
:将
显示为筛选器。这就是它运行的原因

我猜您希望定义
:将页面
过滤器设置为仅为
显示
操作运行。这确实是您的意图,请使用:

before_filter :set_page, only: :show
PS:
\u过滤器
过滤器已弃用。改用
\u action
过滤器,如
在\u action
之前