Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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 fragment&;ActiveRecord或SQL缓存在Rails 4中工作吗?_Ruby On Rails_Ruby_Caching - Fatal编程技术网

Ruby on rails fragment&;ActiveRecord或SQL缓存在Rails 4中工作吗?

Ruby on rails fragment&;ActiveRecord或SQL缓存在Rails 4中工作吗?,ruby-on-rails,ruby,caching,Ruby On Rails,Ruby,Caching,好的,我有一个基本的CMS在工作中&我想尝试一下缓存本质上是一组动态生成的导航链接。在我的pages\u控制器中,我有以下操作来切换页面的可见性,以及基于这些可见页面创建@nav\u links变量的查询 before_filter :nav_links, only: [:index, :new, :show, :edit] def toggle @visibility = @page.visible? ? false : true unless @page.update_attrib

好的,我有一个基本的CMS在工作中&我想尝试一下缓存本质上是一组动态生成的导航链接。在我的
pages\u控制器
中,我有以下操作来切换页面的可见性,以及基于这些可见页面创建
@nav\u links
变量的查询

before_filter :nav_links, only: [:index, :new, :show, :edit]

def toggle
  @visibility = @page.visible? ? false : true
  unless @page.update_attribute(:visible, @visibility)
    flash[:alert] = "Uh oh! Looks like something went wrong."
  end
  expire_fragment "nav"
end

def nav_links
  @nav_links = {}
  groups = PageGroup.order("id")
  groups.each do |group|
    if group.visible?
      @nav_links[group.name.to_sym] = group.pages.where(visible: true)
    end
  end
end
在我看来,我已经将页面中有关
@nav_links
的部分包装为
。那么我的问题是,当调用其中一个动作时,会发生什么

  • Rails是否仍然执行before_过滤器、查询数据库并重新填充每次访问的
    @nav_链接
    哈希?或者只有当视图在缓存中找不到
    @nav_links
    的副本时才会调用它?如果不是每次都执行,Rails是否默认使用SQL缓存来使用相同的结果,除非记录被更改

  • 我是否也需要修改
    nav_links
    方法,或者缓存是否会像预期的那样工作,仅对更新页面可见性的视图和操作进行更改

  • 提前感谢;我是Rails的新手,所以我希望我的问题有意义。

    如果您将
    缓存“nav”
    包装在一些模板代码周围,则该代码将运行一次,缓存结果,并且缓存将被重用,直到模板更改。您的
    缓存
    调用不引用任何数据对象,因此没有可以更改的应用程序状态,这将导致缓存被破坏

    另外,我相当肯定
    expire\u fragment
    不适用于Rails 4