注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风之云的足迹

点击这里添加博客描述

 
 
 

日志

 
 

Rails在有权限的内容中使用片段缓存(通过JS修改缓存的内容)  

2011-01-11 19:22:47|  分类: Rails |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
问题: 对用户的所有评论加入了片段缓存的机制,但是因为每个评论中有一个修改评论的功能,会有权限的问题,用户只能看到自己有权限修改的评论。如果对每个用户都保存一份缓存的话会导致缓存的命中率非常的低,经常需要清空生成缓存,每个用户都不能利用其他用户已经生产的缓冲内容。

思路: 因为缓存中只是每个用户是否展示修改链接不一样,其它内容都是相同的,所以决定缓存中的内容把修改链接全部加载进去,当页面加载完成后通过Js方法去隐藏没有权限的链接。

具体解决方法:

1. 首先在每个评论的修改链接加入了统一的name值,同时每个链接以评论的作者ID作为链接的ID属性值
<%=link_to_in_place_notes_editor(image_tag('edit.png'), "journal-#{journal.id}-notes",
            { :controller => 'journals', :action => 'edit', :id => journal },
            {:name =>  'notes_editor',:id => journal.user ? journal.user.id : '0',:title => l(:button_edit)}) %>


2. 在页面onload完成的时候调用JS方法去隐藏没有权限的修改链接,首先获取到所有的修改链接,然后通过判断隐藏没有权限的链接
function notes_onload(){ // 隐藏没有权限的修改链接 var notes_editor = document.getElementsByName("notes_editor"); if (notes_editor) { for (var i=0; i<notes_editor.length; i++) { // 如果是自己创建的评论,需要展示修改链接,不是自己的评论隐藏修改链接 if(notes_editor[i].id != '<%=User.current.id%>') notes_editor[i].style.display = 'none'; } } }

3. 对于onload事件不同浏览器不一样
下面的代码发现遨游下还是会有问题,不能执行onload方法。
if (window.addEventListener) { //兼容FF window.addEventListener("load", notes_onload, false); }else if (window.attachEvent){ //兼容IE window.attachEvent("onload", notes_onload); window.attachEvent("onload", sfHover); }else{ window.onload=notes_onload; }  


  评论这张
 
阅读(457)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018