2

tl;dr

以下のexpire_indexメソッドが呼び出さputsれています。ログに が表示されます。ただし、ページを更新すると古いバージョンです。

注:モデルの更新には rails_admin を使用しています。しかし、Rails コンソールを直接使用しても同じ動作に気付きました。

ご協力いただきありがとうございます。とても有難い!

詳細

app/controllers/posts_controller.rb

class PostsController < ApplicationController
  caches_action :index
  cache_sweeper :post_sweeper

  def index
    @posts = Post.published
  end

  def show
    @post = Post.find(params[:id])
   end
end

app/sweepers/post_sweeper.rb

class PostSweeper < ActionController::Caching::Sweeper
  observe Post

  def after_save(post)
    puts "======================"
    puts "      AFTER SAVE      "
    puts "======================"
    expire_index
  end

  private
  def expire_index
    puts "======================"
    puts "   EXPIRING INDEX     "
    puts "======================"
    expire_action(:controller => '/posts', :action => 'index')
  end
end

config/environments/production.rb

config.action_controller.perform_caching = true
config.cache_store = :dalli_store # using memcachier on heroku
4

1 に答える 1

3

動作するようになりました。かかったものは次のとおりです。

def expire_index
  cache_key = "views/#{request.host_with_port}/posts"
  Rails.cache.delete(cache_key)
end

この要点の詳細 - > https://gist.github.com/4400728

于 2012-12-28T21:47:41.370 に答える