Ruby on rails 在rails中缓存DOM更改

Ruby on rails 在rails中缓存DOM更改,ruby-on-rails,caching,Ruby On Rails,Caching,我正在进行部分缓存,它工作得非常好 但是,如果我在缓存块内更改DOM,这些更改将不会被缓存。有没有办法也包括这些变化 以下是我到目前为止的情况: <% cache(@contact.hash_key) do %><div id="<%=@contact.hash_key%>"></div><% end %> <script> //use ajax to prepend new messages. $

我正在进行部分缓存,它工作得非常好

但是,如果我在缓存块内更改DOM,这些更改将不会被缓存。有没有办法也包括这些变化

以下是我到目前为止的情况:

<%
cache(@contact.hash_key) do
    %><div id="<%=@contact.hash_key%>"></div><%
end
%>

<script>
    //use ajax to prepend new messages.
    $(document).ready(function(){
       $.get("/messages?cid=<%=@contact.hash_key%>", function(data) {
          $("#<%=@contact.hash_key%>").prepend(data);
       });
    });
</script>

//使用ajax预先添加新消息。
$(文档).ready(函数(){
$.get(“/messages?cid=”,函数(数据){
$(“#”)前缀(数据);
});
});
更新

好的,所以我尝试在结果使用相同的缓存键进入DOM之前缓存它。这样,当呈现缓存块时,新数据将包含在该键中

但我不确定这种结构的正确方式

完成

因此,对于任何想做同样事情的人,这里有一个关于如何做的简要概述。您可能需要更改或调整此解决方案以适合自己的需要

这仅在使用缓存密钥时有效。在我的例子中,我有两种类型。A
contact.hash\u key
和A
message.hash\u key

所有邮件缓存都保存在父联系人缓存中。因此,本质上:

<div id='contact-hash'>
    <div id='message-hash-1'>
    <div id='message-hash-2'>
    <div id='message-hash-3'>
现在我们有一个已经加载的缓存消息列表。那么新消息呢?让我们通过ajax加载这些内容,这样用户就不会等待无聊的页面加载了

您会注意到,在我上面的问题中,我在AJAX调用中查询了
“/messages?cid=“
”。这将调用
消息控制器
并呈现
索引视图

在将渲染视图加载到DOM中之前,我们希望首先使用我们将用于读取它的相同message.hash_键将其写入缓存

因此,在你看来:

<%
cache(message[:hash_key]) do
%>
   <div class='message'>
        This is a new message from the server.
   </div>
<%
end
%>

这是来自服务器的新消息。
如果在某些情况下这不起作用(天知道有这么多应用程序排列),你也可以在控制器中使用
Rails.cache.write'foo',bar'
,而不是在视图级别缓存它

就在这里。现在,您可以将新的hash_键添加到列表中,然后将视图作为AJAX调用的结果呈现回DOM

现在,在列表中有了新的hash_键,您就可以对它进行循环,它将作为缓存副本出现

这可能是也可能不是最优雅的解决方案。如果有人想简化或提供任何建议,以便我可以改进它,将不胜感激

<%
cache(message[:hash_key]) do
%>
   <div class='message'>
        This is a new message from the server.
   </div>
<%
end
%>