railsのキャッシュ機能を使うときに重要になってくる Sweeper
generate で作成できないのでどこに **_sweeper.rbを置けばいいか
迷った結果、app/models以下が良さげ(app/controllers以下という意見も
あったが、なんとなく心配なので・・・)
class IndexSweeper < ActionController::Caching::Sweeper
observe WhatsNew
def after_save(record)
expire_page(:controller => "/index", :action => :index)
end
end
といった具合で作成して
WhatsNewを作成、更新するコントローラに
cache_sweeper :index_sweeper, :only => [:create, :update]
と入れる。
これを入れなくてもafter_saveは通ってくれるが、expire_pageでnilが
返ってきてファイルは削除してくれない。
テストでちゃんとここを通ってるか確認したい場合は
def after_save(record)
expire_page(:controller => "/index", :action => :index)
record.instance_variable_set(:@index_sweeper, !@controller.nil?)
end
とかやって test の方で
assert model_object.instance_variable_get(:@index_sweeper)
とやるといいと思います。