filter的使用

filter有很多复杂的应用,如果比较简单地使用就直接映射到函数上去,如果统一管理规划就定义类。

一般来说都是映射到函数上。

说几个常用的fitler:

登录


这是定义filter
ruby 代码
 
  1. before_filter :auth:except => [:login]  
:auth是函数名,定义在后面,:except是例外,也就是对login这个action不经过filter,当然了,在没登录前是不需要验证用户的。

auth的定义:
ruby 代码
 
  1. def auth  
  2.   user_id=session[:user_id]  
  3.   if !user_id.nil?  
  4.     @login_user=User.find(user_id)  
  5.     if !@login_user.admin_manage?  
  6.       @login_user=nil  
  7.     end  
  8.   else  
  9.     @login_user=nil  
  10.   end  
  11.   
  12.   if @login_user==nil  
  13.     redirect_login()  
  14.   end  
  15. end  

这里写了这么多废话,主要是防止非admin用户登录。另外缺省初始化一个@login_user。还有非常简略的写法,不过不好看。

redirect_login()函数在另外地方定义,就是一个简单的重定向。

处理通用异常

定义filter:
ruby 代码
 
  1. around_filter :catch_error  

这次是用around filter,catch_error的定义如下:

ruby 代码
 
  1. def catch_error  
  2.   yield  
  3. rescue => detail      
  4.   exception_log("#{action_name} error:",detail)  
  5.   flash[:notice]= "err_#{action_name}".to_sym.l("#{action_name} error")+" : #{$!}"  
  6.   if action_name != "index"  
  7.     redirect_to(:action=>"index")  
  8.   end  
  9. end  

这里做了一个转换,将action_name转成了err_<action_name>,这个必须要在国际化文件中定义,这样就会输出正确的错误信息。使用了globalite来做国际化。

exception_log是一个记录log的函数。

所有出错都返回index。

yield这里显然就是运行各个action的地方。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值