完成!
因此,對於任何想要做同樣的事情的人來說,這裏是一個關於如何做到這一點的簡要大綱。您可能需要對此解決方案進行更改或調整以適應您的需求。
這隻有在您使用緩存鍵時纔有效。在我的例子中,我有兩種類型。一個contact.hash_key
和message.hash_key
所有消息緩存保持父接觸緩存中。所以本質上:
<div id='contact-hash'>
<div id='message-hash-1'>
<div id='message-hash-2'>
<div id='message-hash-3'>
首先,我們需要遍歷消息,看看它們是否被緩存。如果他們是那麼你可以只渲染緩存的副本。您可以通過使用Rails.cache.read
方法做到這一點:
messages.each do |message|
cache = Rails.cache.read 'views/'+message.hash_key
if cache.nil? == false
%><%= cache.html_safe %><%
end
end
所以,現在我們已經被加載從緩存中這就是消息的名單。那麼新消息呢?讓我們通過ajax加載它們,這樣用戶就不會等待無聊的頁面加載。
你會發現在我的問題上面我在我的AJAX調用中詢問"/messages?cid=<%[email protected]_key%>"
。這是調用messages controller
並呈現index view
。
在我們想要將渲染的視圖加載到DOM之前,我們首先想到將它寫入緩存,但是我們將使用相同的message.hash_key來讀取它。
所以在你看來:
<%
cache(message[:hash_key]) do
%>
<div class='message'>
This is a new message from the server.
</div>
<%
end
%>
如果在某些情況下,這並不工作(天知道那裏有這麼多的應用程序排列在那裏),你也可以在控制器中使用Rails.cache.write 'foo', 'bar'
而不是在其高速緩存的視圖級別。
而你有它。現在,您可以將新的hash_key添加到列表中,然後將視圖呈現回DOM,作爲AJAX調用的結果。
現在,您可以在列表中使用新的hash_key循環它,並將其作爲緩存副本。
這可能是也可能不是最優雅的解決方案。如果有人想簡化或給出任何建議,所以我可以改進它,將不勝感激。