完毕!
因此,对于任何想要做同样事情的人来说,这里有一个关于如何做的简要概述。您可能需要进行更改或调整此解决方案以适合您自己的解决方案。
这仅在您使用缓存键时才有效。在我的例子中,我有 2 种类型。一个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 加载这些,这样用户就不会等待无聊的页面加载。
您会在我上面的问题中注意到我"/messages?cid=<%=@contact.hash_key%>"
在 AJAX 调用中进行了查询。这是调用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 添加到列表中,然后将视图作为 AJAX 调用的结果呈现回 DOM。
现在使用列表中的新 hash_key,您可以对其进行循环,它将作为缓存副本出现。
这可能是也可能不是最优雅的解决方案。如果有人想对其进行简化或提供任何建议,以便我对其进行改进,将不胜感激。