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