Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7571345 建立时间:2006年5月29日 |

| |
[Ruby on Rails]ROR登录程序不求人--LoginEngine的安装和使用 软件技术
lhwork 发表于 2007/2/8 10:14:56 |
ROR的Plugin机制可怕之处在于可以重用一个完整的Web程序,从表示层到数据库。http://rails-engines.org/就是向着这一个方向努力的先驱。 Login常常是Web开发教程的Hello World,每一本教科书必讲。作Web项目的开发者想必也能够闭着眼睛开发一个Login程序了。这种需求相对稳定的应用往往就是重复开发轮子的开端,幸运的是,LoginEngine已经把轮子给我们做好了。
下载 官方网站推荐用ruby script/plugin discover。可是在我的机器上执行出错,所以只能手动输入URL来取代查找机制。
通过SVN $ svn propset svn:externals "engines http://svn.rails-engines.org/plugins/en |
|
[Ruby on Rails]Login Engine补丁 软件技术
lhwork 发表于 2007/2/8 10:11:29 |
Login Engine是非常好用的一个登录engine,不过也有个缺点,它把用户信息缓存在session里。如果用户每次修改完自己的资料,都把session更新的话,自然是不会有什么数据不同步的问题。不过试想这样一种情况:
1、用户A登录;用户A的信息将保存在session[:user]里。 2、管理员操作用户A,修改用户A的资料并保存。 3、用户A刷新页面。
如果显示用户资料是从session[:user]读取的话,显然用户A看到的是老的资料。
正确的做法是管理员修改用户资料以后,把用户session里的内容也更新,当然这个实施起来有些困难,目前看来无法由用户ID获得对应的session。
有朋友说session里不应该缓存用户信息,而应只保存用户ID。这是正确的,这样可以解决上面的问题,不过带来的问题是每次都要从数据库查询。
如果每次刷新页面都从数据库重新读取用户信息,对性能影响是很大的。试想一下用户正在浏览一个论坛的帖子列表,这个页面可能所有用户 |
|
[Ruby on Rails]简单的角色权限检查插件 软件技术
lhwork 发表于 2007/2/8 10:10:38 |
代码比较简单:
module ActionController #:nodoc:
class CheckGroupError < ActionControllerError #:nodoc: attr_reader :group_name def initialize(group_name)   |
|
[Ruby on Rails]实现一个auto_redirect_to 软件技术
lhwork 发表于 2007/2/8 10:09:12 |
最近在使用RoR做项目,体会到了快速开发的乐趣,也遇到了一些困难,其中一个就是redirect_to。
我遇到的一个问题是,当使用Ajax更新页面局部内容时,session内容已经过期,这时需要整个页面跳转到登录页面。
直接调用redirect_to会使局部内容显示成登录页面,它是在HTTP头里写入重定向参数来实现的。在我这里的特殊情况下,正确的做法是让它执行一个包含在<script>标记中的脚本,在脚本中更改窗口location值来跳转。
不过RoR中使用Ajax时,会根据:update参数来决定是使用Updater还是Request。如果使用Updater方式,则应返回一段纯脚本;如果是Request方式,应返回一段包括在<script>标记中的脚本;如果是普通方式,就应该使用原有的redirect_to函数了。因为服务端无法区分使用的是哪种方式来请求,所以简单的做法是每个请求都附加一个参数用来区分,不加参数则是普通请求方式。
为了达到这个目的,我修改了proto |
|
[Ruby on Rails]修复update_attribute(s)更新全部字段的问题 软件技术
lhwork 发表于 2007/2/8 10:07:46 |
这是前段时间有人讨论过的问题:
代码:
order = Order.find(1) order.update_attribute(:status, 'finished')
假定orders表有10个字段,你只想更新其中一个,但active record会生成一个更新全部字段的SQL语句,假定其中一个字段值长度是20K,这个负担可能会有些重。
我尝试解决这个问题,写了个简单的插件:
|
[Ruby on Rails]Ruby AOP 软件技术
lhwork 发表于 2007/2/8 10:06:15 |
昨天在答一个问题时,看题不清答错了,不过却让我花了点时间想如何实现简单的AOP。
在其它语言里实现AOP的确比较麻烦,java要用到动态proxy,如果是C++,除了从源码上修改还真没好办法,aspectc就是这么做的。那么ruby里面如何实现呢?
由于ruby是动态脚本语言,运行期可以把一个方法改名,也可以构造一个字符串动态生成方法,那么实现这个就不是难事了。
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> |
|
[Ruby on Rails]Post/Get分派 软件技术
lhwork 发表于 2007/2/8 10:04:26 |
一、前言
出于数据安全性考虑,某些破坏性链接应该使用post请求,比如一个删除记录的请求。
除了脚本确认以外,服务端还需要post验证,因为脚本是可以绕过的。想像你的页面上有一个删除链接,只作了客户端脚本确认(老的scaffold生成代码有这问题),被google找到了,它一个请求就会让你的数据丢失。
rails对于这类请求的处理,是通过verify方法,默认的scaffold生成代码有如下内容:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/< |
|
[Ruby on Rails]Active Record 错误信息本地化 软件技术
lhwork 发表于 2007/2/8 10:00:32 |
ActiveRecord出错信息是已经格式化过的英文字符串,这很不方便做本地化处理。要想做本地化,必须保留错误数据,在显示时再格式化为本地语言。不过ActiveRecord过早地把错误信息格式化为字符串,基本上已经断绝了本地化这条路。
为了让ActiveRecord错误信息可以本地化,我采用打补丁的方式。查看验证这部分代码,发现格式化字符串分散在各个验证方法中,一一重写不大合算。好在它是调用default_error_messages方法来取得错误信息字符串,于是考虑在这里做点文章。
代码
class ActiveRecord::ValidateError < |
|
|
站点首页 | 联系我们 | 博客注册 | 博客登陆
Sponsored By W3CHINA W3CHINA Blog 0.8 Processed in 0.172 second(s), page refreshed 144760708 times. 《全国人大常委会关于维护互联网安全的决定》 《计算机信息网络国际联网安全保护管理办法》 苏ICP备05006046号
|