【问题标题】:will_paginate problem with action and fragment cachingwill_paginate 动作和片段缓存问题
【发布时间】:2011-01-05 05:40:56
【问题描述】:

我已将 动作缓存 添加到我的 index 部分并在页面中列出 9 条记录

will_paginate dosent 工作,并一次又一次地呈现相同的记录集。

片段缓存

也有同样的问题

请为此提出一些解决方案..

谢谢

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      除非您有一个非常基本的 Rails 应用程序,否则我建议您使用片段缓存,因为与动作/页面缓存相比,它更易于使用和维护。如果您决定使用片段缓存,您可以在索引模板中添加如下内容:

      <% @models.each do |model| %>
        <% cache ["v1", model] do %>
          <%= render model %>
        <% end %>
      <% end %>
      

      这将渲染部分_model.html.erb 并缓存结果。关于 Rails 中缓存机制的详细信息,我建议阅读Rails Guides

      更积极的缓存策略是将所有模型缓存在一个页面上。这可以通过将当前页面设置为控制器中的实例变量来完成:

      def index
        @page   = params[:page]
        @models = ...
      end
      

      现在您可以在模板中将页面包含在复合缓存键中:

      <% cache ["v1", cache_key_for(@models), @page] do %>
        <% @models.each do |model| %>
          <%= render model %>
        <% end %>
      <% end %>
      
      <% end %>
      

      cache_key_for 是为一组模型计算缓存键的助手。可以这样定义:

      def cache_key_for(models)
        "#{models.count}-{models.map(&:updated_at).max.utc.to_s(:number)}"
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 2011-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        相关资源
        最近更新 更多