2013-07-09 45 views
0

前綴所以我們使用相同的控制器來服務於我們網站的移動和桌面視圖。我們還大量使用動作緩存來緩存memcache中頁面的html。我一直在想辦法將所有移動請求的緩存前綴全局更改爲「views-mobile /」,而不是標準的「views /」。這樣移動和桌面頁面將被保存在不同的名稱空間下,因此在memcache中不會發生衝突。如何改變ActionCaching「的意見/」每個請求

我們可以通過創建使用IS_MOBILE控制變量的自定義cache_path做到這一點每caches_action方法?,但我們寧願做全球莫名其妙。有什麼建議麼?我想這將需要monkey-patching ActionController :: Caching,但我無法弄清楚它在哪裏產生「views /」前綴。

回答

0

其實我最終搞清楚了這一點自己。基本上,ActionController :: Base使用稱爲fragment_cache_key的函數來爲特定片段生成緩存鍵(這是ActionCaching深層使用的內容)。所以你基本上覆蓋了這個方法,並且包含你自己的邏輯來生成前綴。這是我的方法覆蓋看起來如何:

# Monkey patch fragment_cache_key 
def fragment_cache_key(key) 
    ActiveSupport::Cache.expand_cache_key(key.is_a?(Hash) ? url_for(key).split("://").last : key, mobile_device? ? "views-mobile" : "views") 
end 

where mobile_device?是我自己的功能,可以確定用戶是否正在請求移動版或桌面版網站。

0

對不起,我是Rails的nubie,所以我真的不明白你的問題,但如果是正確的,這是你的意思?

這是我的的routes.rb

scope "/administrator" do 
    resources :users 
end 

我改變了我的users_path '前綴' 來administrator。很抱歉,如果錯了:d