在我的post_index操作中,我生成了不同类型的“@posts”,如..
def index
case params[:listing_type]
when "all"
@posts = get_all_post_from_memcached
when "most_popular"
@posts = get_all_most_popular_from_memcached
respond_to do |format|
format.html
format.js #for ajax reqeusts
format.xml #for rss etc
end
end
end
##updated
def index
case params[:listing_type]
when "all"
#the key here is teh same key I used for memcached
if stale?(:etag => 'all_posts_key')
@posts = get_all_post_from_memcached
else
head :not_modified and return
end
when "most_popular"
if stale?(:etag => 'most_popular_key')
@posts = get_all_most_popular_from_memcached
else
head :notified and return
end
respond_to do |format|
format.html
format.js #for ajax reqeusts
format.xml #for rss etc
end
end
end
根据我的理解fresh_when
需要etag
,如果不同类型的渲染没有区别(在我的情况下渲染因html或ajax而异),则可以使用它
和
stale?
也会占用etag
并围绕respond_to块。
在这种情况下,etag
将根据不同的列表类型而有所不同。但似乎fresh_when
或stale?
可以在这里使用的方式没有太大的灵活性?
由于
更新。我稍微更改了原始块,现在得到双重渲染错误我做错了,应该“头:通知并返回”只返回标题而不是触摸respond_to
块?
答案 0 :(得分:0)
如果你有像show方法那样的特殊响应处理,那么使用陈旧?帮手。如果您没有像编辑方法中那样的特殊响应处理并使用默认渲染机制(即,您没有使用respond_to或自己调用渲染),那么请使用fresh_when。