Rails 关于局部视图的优化问题

zhangsm · 2014年11月01日 · 最后由 huacnlee 回复于 2014年11月07日 · 1775 次阅读

大周末,就不应该折腾代码啥的,遇到一个问题,没有思路,过来请教下:

我有一个导航的局部视图,再多个页面用到,而且是加载相同的数据,topics_nav.html.erb代码如下:

<div class="panel nodes" >
  <p>分类导航</p>
  <% if @sections.count > 0 %>
    <dl class="accordion" data-accordion>
      <% @sections.each do |section| %>
        <dd class="accordion-navigation">
          <a href="#section<%= section.id %>" class="first"><%= section.name %> <i>(<%= section.nodes_count %>)</i></a>
          <div id="section<%= section.id %>" class="content">
            <dl class="accordion">
              <% section.nodes.each do |node| %>
                <dd class="accordion-navigation">
                  <%= link_to node.name, topics_node_path(node_id: node.id) %>
                </dd>
              <% end %>
             </dl>
          </div>
        </dd>
      <% end %>
    </dl>
  <% else %>
    <i>还没有创建节点哦</i>
  <% end %>
</div>

使用gem 'cells', "3.9.1"把它进行组件化之后,

class NodeCell < Cell::Rails
    cache :topics_nav, :expires_in => 1.days

    def topics_nav
        @sections = Section.topics.includes(:nodes)
        render
    end

end

在用到的地方进行渲染<%= render_cell :node, :topics_nav %>

现在问题来了,每次刷新,或者每次加载用到这个导航视图的时候,都会向数据库发起请求,但数据视没有变化的,如下:

我就想,它不用去请求数据库,直接渲染视图。。。。。。 有没有谁可以提供点思路? 或者,社区里曾经有类似的帖子?

站内搜索 fragment_cache

#1 楼 @huacnlee 谢谢你的回复。搜了一下,还真有不少干货!

#1 楼 @huacnlee Ruby China 我记得用过 cells,后来是基于什么考虑不用了呢?

#3 楼 @cisolarix 升级 Rails 带来问题,又用处不大,就去掉了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号