Ruby on rails 在rails中缓存DOM更改
我正在进行部分缓存,它工作得非常好 但是,如果我在缓存块内更改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. $
<%
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之前缓存它。这样,当呈现缓存块时,新数据将包含在该键中
但我不确定这种结构的正确方式 完成
因此,对于任何想做同样事情的人,这里有一个关于如何做的简要概述。您可能需要更改或调整此解决方案以适合自己的需要
这仅在使用缓存密钥时有效。在我的例子中,我有两种类型。Acontact.hash\u key
和Amessage.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
%>