本站首页    管理页面    写新日志    退出


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

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


阅读全文(3458) | 回复(0) | 编辑 | 精华 | 删除
 


[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。这是正确的,这样可以解决上面的问题,不过带来的问题是每次都要从数据库查询。

如果每次刷新页面都从数据库重新读取用户信息,对性能影响是很大的。试想一下用户正在浏览一个论坛的帖子列表,这个页面可能所有用户


阅读全文(2705) | 回复(0) | 编辑 | 精华 | 删除
 


[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)
      

阅读全文(2137) | 回复(0) | 编辑 | 精华 | 删除
 


[Ruby on Rails]ActionController::Caching模块缓存位置BUG
软件技术

lhwork 发表于 2007/2/8 10:09:47

Caching模块用来实现caches_action/caches_page/fragment,普通用法没发现什么问题,问题在于使用下面的例子时,它不能缓存到正确的位置:

class CacheController < ApplicationController
  caches_action :cache_one
  caches_page   :cache_two
  #
end

阅读全文(2164) | 回复(0) | 编辑 | 精华 | 删除
 


[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

阅读全文(2244) | 回复(0) | 编辑 | 精华 | 删除
 


[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,这个负担可能会有些重。

我尝试解决这个问题,写了个简单的插件:

阅读全文(3075) | 回复(0) | 编辑 | 精华 | 删除
 


[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>-->

阅读全文(2132) | 回复(0) | 编辑 | 精华 | 删除
 


[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/<

阅读全文(2709) | 回复(0) | 编辑 | 精华 | 删除
 


[Ruby on Rails]Active Record 错误信息本地化
软件技术

lhwork 发表于 2007/2/8 10:00:32

ActiveRecord出错信息是已经格式化过的英文字符串,这很不方便做本地化处理。要想做本地化,必须保留错误数据,在显示时再格式化为本地语言。不过ActiveRecord过早地把错误信息格式化为字符串,基本上已经断绝了本地化这条路。 为了让ActiveRecord错误信息可以本地化,我采用打补丁的方式。查看验证这部分代码,发现格式化字符串分散在各个验证方法中,一一重写不大合算。好在它是调用default_error_messages方法来取得错误信息字符串,于是考虑在这里做点文章。 代码 class ActiveRecord::ValidateError   <

阅读全文(2153) | 回复(0) | 编辑 | 精华 | 删除
 


[Ruby on Rails]ActiveRecord 查询优化
软件技术

lhwork 发表于 2007/2/8 9:56:18

ActiveRecord使用很方便,只需要声明映射关系,就可以方便地获取各个关联对象,而且是延迟加载。有时候这种关系延迟加载可能会严重影响性能,比如下面这个例子:
ruby 代码 class User < ActiveRecord::Base    end     

  • 阅读全文(2040) | 回复(0) | 编辑 | 精华 | 删除
     


    « 1 2 3 4 5 6 7 8 9 10 »



    站点首页 | 联系我们 | 博客注册 | 博客登陆

    Sponsored By W3CHINA
    W3CHINA Blog 0.8 Processed in 0.172 second(s), page refreshed 144760708 times.
    《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
    苏ICP备05006046号