Как использовать одну и ту же кэшированную страницу для разных URL в рельсах? - PullRequest
1 голос
/ 08 ноября 2011

У меня есть два URL, которые в основном отображают одну и ту же страницу.Незначительные различия могут быть легко выполнены с помощью JavaScript, основанного на location.href.В любом случае, даже если маршруты указывают на один и тот же controller#action, второй маршрут не использует страницу, кэшированную первым.Как мне этого добиться?

1 Ответ

0 голосов
/ 21 ноября 2011

На моем веб-сайте напротив вас есть интересное требование - разные страницы могут возвращаться с одного и того же 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 в соответствии с вашими требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...