2011-11-08 36 views
1

私は基本的に同じページをレンダリングする2つのURLを持っています。軽微な違いは、location.hrefに基づいて、javascriptで簡単に実行できます。とにかく、ルートが同じcontroller#actionを指している場合でも、2番目のルートは前者のキャッシュされたページを使用していません。どうすればこれを達成できますか?レールの異なるURLに同じキャッシュページを使用するにはどうすればよいですか?

答えて

0

私はあなたの反対の私のウェブサイトで興味深い要件を持っています - 異なるテーマのために同じURLから別のページを返すことができます。だから、私は "匿名キャッシュ"と呼ばれるソリューションを考え出し、余分なパラメータを含む私自身のキャッシュキーを作成します。しかし、私はこの解決策があなたにいくつかの手がかりを与えることができると思う。私は、ページキャッシュのための標準的なキーを作るところ

module AnonymousCache 
    def self.included(base) 
    base.extend(ClassMethods) 
    end 
    module ClassMethods 
    def caches_page_for_anonymous(*pages) 
     before_filter :check_cache_for_anonymous, :only => pages 
     after_filter :cache_for_anonymous, :only => pages 
    end 
    end 
    def check_cache_for_anonymous 
    return unless perform_caching 
    return if logged_in? 
    path = anon_cache_path 

    if content = Rails.cache.read(path) 
     send_data(content, 
     :type => 'text/html;charset=utf-8', :disposition => 'inline') 
     return false 
    end 
    end 
    def cache_for_anonymous 
    return unless perform_caching 
    return if logged_in? 
    path = anon_cache_path 
    @expires_in ||= 1.hour 
    self.class.benchmark "Cached page for guest: #{path}" do 
     Rails.cache.write(path, response.body, :expires_in => @expires_in.to_i) 
    end 
    end 
    protected :check_cache_for_anonymous 
    protected :cache_for_anonymous 
    private 
    def anon_cache_path() 
     path1 = File.join(request.host, current_theme, request.path) 
     q = request.query_string 
     path1 = "#{path1}?#{q}" unless q.empty? 
     path1 
    end 
end 

anon_cache_path方法があります。私にはcurrent_themeが含まれているのが分かります。

これをコピーして、お客様の要件に応じてanon_cache_pathを変更することができます。

関連する問題