【发布时间】:2014-03-16 02:39:27
【问题描述】:
好的,我有一个基本的 CMS 正在开发中,我想尝试一下缓存本质上是一组动态生成的导航链接的内容。在我的pages_controller 中,我有以下操作来切换页面的可见性,以及根据可见页面创建@nav_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
在我看来,我已经用<% cache "nav" do %>...<% end %> 包装了与@nav_links 相关的页面部分。所以我的问题是,当调用其中一个操作时会发生什么?
Rails 是否仍会执行 before_filter、查询数据库并在每次访问时重新填充
@nav_links哈希?还是仅当视图在缓存中找不到@nav_links的副本时才调用它?如果不是每次都执行,Rails 是否默认使用 SQL 缓存来使用相同的结果,除非记录被更改?我是否还需要修改
nav_links方法,或者缓存是否会按预期工作,只需更改更新页面可见性的视图和操作?
提前致谢;我是 Rails 的新手,所以我希望我的问题有意义。
【问题讨论】:
标签: ruby-on-rails ruby caching