开发者

rails fresh_when/stale? usage

开发者 https://www.devze.com 2023-01-17 04:43 出处:网络
In my post_index action, I generate different kinds of \"@posts\" like.. def index case params[:listing_type]

In my post_index action, I generate different kinds of "@posts" like..

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

From what I understand fresh_when takes a etag, and it is to be used if there is no difference in different kinds of rendered (in my case the rendering is different based on html or ajax)

and

stale? also takes an etag and surrounds the respond_to block.

In this case the etag will be different based on the different listing types. But it seems there isn't much flexibility in the way fresh_when or stale? can be used here?

Thanks

开发者_开发问答

update. I changed the original block a little and now get a double render error what am I doing wrong, should "head :notified and return" just return the header and not touch the respond_to block?


If you have special response processing like the one in show method, then use stale? helper. If you don’t have any special response processing like the one in edit method and using default-rendering mechanism (i.e., you’re not using respond_to or calling render yourself) then use fresh_when.

0

精彩评论

暂无评论...
验证码 换一张
取 消