真实世界中的Rails,第2部分: 高级页面缓存 - 编程入门网
正确的体验。为了进一步细分,我会进行如下操作:
创建只 具有所有用户的公共元素的 Web 页。 当用户登录时,将一些有关该用户的数据存入 cookie,比 如说登录信息。 然后,使用 JavaScript 依据 cookie 的内容注入 HTML 段,借此填充该页面的 剩余部分。 对于 ChangingThePresent 主页而言,show-and-tell 技巧有些威力过度,因为我只 有两套链接要根据所登录的用户加以显示。因此,我选择了第二种技巧,我称之为 hide-and-seek。首先 ,显示出所有用户的公共页面元素,并通过每种数据可能 的隐藏版本显示页面的变化部分。这就是 hide 部分。然后,根据用户的角色使用 JavaScript 在文件中找到该用户的内容并显示出来。这就是 seek 部 分。您可能会想,显示所有可能数据的版本有点威力过度,实际上,选择性地为不同的安全角色启用多种 特性时,这种方式是十分常见的。hide-and-seek 方式非常适合 ChangingThePresent 主页。要实现这种 方法,可以执行如下操作: 创建只具有所有用户的公共元素的 Web 页。 将用户按类型分区。为每个用户类型添加内容版 本。就我的具体情况而言,ChangingThePresent 主页的用户类型包括登录用户和登出用户。最初,让此 内容可见。 当用户登录时,将一些可区分用户分组的数据存入 cookie,比如说用户角色或登录 状态。 当用户访问此页时,选择性地显示用户类型的内容版本。 真实世界中的Rails,第2部分: 高级页面缓存(4)时间:2011-11-20 Bruce Tate实现 hide and seek 对于 ChangingThePresent 主页而言,hide-and-seek 实现起来异常简单。在之前的图 1 中 ,此主页有一个部分显示的是与用户帐户相关的一些链接。这些链接可以根据用户是否登录而变化。首要 工作是构建此页的所有公共内容。我在本文并未给出具体做法。第二页需要显示出所有用户的全部动态内 容,而不管用户是否已经登录: 清单 1. 在单一视图中创建动态内容的所有版本 <div id=''logged_out''> <%= link_to "login", :controller => ''members'', :action => ''login'' %> <br /> <%= link_to "register", :controller => ''members'', :action => ''signup'' %> </div> <div id=''logged_in'' style="display: none;"> <%= link_to "your profile", :controller => ''profiles'', :action => ''show'' %> <%= link_to "logout" , :controller => "members", :action => "logout" %> </div> 您可能已经注意到 my profile 链接。起初,该链接指向用户特定的配置文件, 但这样可能会妨碍我们的主页缓存。相反,我只简单地将此链接指向了无任何用户 ID 的索引操作。然后 ,索引操作会将用户重定向到正确的配置文件页: 清单 2. 将用户重定向到正确的配置文件页 def index redirect_to my_profile_url end 在清单 2,my_profile_url 是一个方法,该方法可以根据用户的类型(这可能是名人 、顾问或会员)决定正确的配置文件 URL。每个用户类型都有一个单独的配置文件页。这时,程序的功能 已经完成,您总共可以看到四个链接,logged_in 和 logged_out 各有两个链接: login register your profile logout 真实世界中的Rails,第2部分: 高级页面缓存(5)时间:2011-11-20 Bruce Tate下一步,获取含有当前用户类型的 cookie。对于 ChangingThePresent,我在登录时创建了一个 cookie,其中含有当前的登录 ID。之后, 在登出时再销毁这个 cookie: 清单 3. 在登录和登出时创建和销毁 cookies def login i |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |