如果我在url中使用分页和其他参数,我该如何设置片段缓存?

时间:2013-01-27 09:41:43

标签: ruby-on-rails ruby-on-rails-3 caching

我正在使用devisekaminaridalli(memcached) 我刚刚尝试在加载http://example.com/communities?sort=popular

时实现缓存

我尝试编码如下。但是,缓存存储似乎无法正常工作 看起来每次重新加载页面时它仍在发送SQL ...

怎么了?

然后,如果可能的话,我想在用户制作或编辑“社区”记录后清除包含字符串“community_index_sort_by_”的所有存储缓存。

配置/环境/ development.rb

...
config.consider_all_requests_local       = true
config.action_controller.perform_caching = true
config.cache_store = :dalli_store
...

community_controller.rb

def index

    @key = "community_index_sort_by_" + params[:sort].to_s + "_page_" + params[:page].to_s

    if params[:sort] == 'popular'
        unless Rails.cache.fetch(:controller => "communities", :action => "index",  :action_suffix => @key)
            @communities = Community.scoped.page(params[:page]).order("cached_votes_up DESC")
        end
    elsif params[:sort] == 'latest'
        @communities = Community.scoped.page(params[:page]).order("created_at DESC")
    end

end

我没有触及任何视图文件

1 个答案:

答案 0 :(得分:1)

缓存片段是否在具有缓存调用的视图中创建?

在视图中,不要忘记在密钥中包含params,如页面偏移:

<% cache 'the_cache_fragment_key' do %>
...the view...
<% end %>

在控制器中:

unless fragment_exist?('cache_fragment_key')
 ...cache fragment doesn't exist, make a call for it...
end

此导轨演员可能会有所帮助。 http://railscasts.com/episodes/90-fragment-caching

为了在更新时清除缓存,rails sweepers非常有帮助。您可以为模型方法或控制器操作定义方法。 http://guides.rubyonrails.org/caching_with_rails.html#sweepers