在我的 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 并包围 response_to 块。

在这种情况下,etag 将根据不同的列表类型而不同。但是在这里使用 fresh_whenstale? 的方式似乎没有太大的灵活性?

谢谢

更新。我稍微更改了原始块,现在出现双重渲染错误我做错了什么,“头:通知并返回”应该只返回标题而不是触摸 respond_to 块吗?

最佳答案

如果您有像 show 方法中那样的特殊响应处理,那么使用 stale? helper 。如果你没有像 edit 方法那样的特殊响应处理并使用默认渲染机制(即,你没有使用 response_to 或自己调用渲染),那么使用 fresh_when。

关于ruby-on-rails - rails fresh_when/stale?用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3744090/

10-10 12:31