【发布时间】:2011-01-25 14:15:04
【问题描述】:
我正在尝试使用清扫器来处理我的页面刷新。对于刷新索引操作等,一切正常……但我似乎无法让扫地者解释页面参数。如果有人能告诉我下面的代码有什么问题,我将不胜感激:
控制器:
class PostsController < ApplicationController
load_and_authorize_resource
cache_sweeper :post_sweeper, :only => [:create, :update, :destroy]
caches_page :index
caches_page :show
caches_action :edit, :new
# This refreshes cache correctly
def index
@posts = Post.all
end
# 这会创建缓存,但不会(永远)刷新它。如果我将 expire_page 命令直接放入操作中(而不是清扫器),它可以正常工作
def update
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
flash[:notice] = t(:post_updated)
format.html { redirect_to(@post) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
end
end
end
扫地机:
class PostSweeper < ActionController::Caching::Sweeper
observe Post
def after_create(record)
expire_cache_for_index(record)
end
def after_update(record)
expire_cache_for_index(record)
expire_cache_for_post(record)
expire_cache_for_edit(record)
end
def after_destroy(record)
expire_cache_for_index(record)
expire_cache_for_post(record)
expire_cache_for_edit(record)
end
private
def expire_cache_for_index(record)
expire_page :controller => 'posts', :action => 'index'
end
def expire_cache_for_post(record)
expire_page :controller => 'posts', :action => 'show', :id => record.id
end
def expire_case_for_edit(record)
expire_action :controller => 'posts', :action => 'edit', :id => record.id
end
end
【问题讨论】:
-
你在
PostSweeper中的最后一个私有方法是expire_case_for_edit,但应该是expire_cache_for_edit。 -
谷歌可能是你的朋友:stackoverflow.com/questions/1988658/…
-
dmarkow:感谢您的关注 - 不幸的是,潜在问题仍然存在。 Apneadiving:也欢呼 - 已经尝试过,但仍然没有快乐。
-
认为这应该可行,您的方法名称中有一个用于使编辑操作过期的拼写错误,您有 'def expire_case_for_edit' 而不是 'def expire_cache_for_edit',这有帮助吗?
标签: ruby-on-rails caching sweeper