SEXY VALIDATION IN EDGE RAILS (RAILS 3) Rails 3中的sexy validation

名字定为 “sexy validations” 的原因是:此种方法提供了1种更简洁的校验方式和重用已有的验证类.此种处理方式与 sexy migrations的工作方式类似.

使用已存在Rails校验的简单例子,如下:

  1. class Film <; ActiveRecord::Base  
  2.   validates :title:presence => true:uniqueness => true:length => { :maximum => 100 }  
  3.   validates :budget:presence => true:length => { :within => 1..10000000 }  
  4. end  
上述为一种"sexy"方式;

当使用自定义验证时,"validates"方法的作用显现出来了:

  1. class IntenseFilmTitleValidator <; ActiveModel::EachValidator  
  2.   def validate_each(record, attribute, value)  
  3.     record.errors[attribute] <;<; "must start with 'The'" unless value =~ /^The/  
  4.   end  
  5. end  
  6.   
  7. class SpendValidator <; ActiveModel::EachValidator  
  8.   def validate_each(record, attribute, value)  
  9.     spend = case options[:size]  
  10.       when :big then 100000000  
  11.       when :small then 100000  
  12.     end  
  13.     record.errors[attribute] <;<; "must not exceed #{spend}        " if value > spend  
  14.   end  
  15. end  
  16.   
  17. class Film <; ActiveRecord::Base  
  18.   validates :title:presence => true:intense_film_title => true  
  19.   validates :budget:spend => { :size => :big } # using custom options  
  20. end  

在Rails中,所有的验证函数及常用的模型函数均被集成到了 ActiveModel中,因此可以使用validations and Validator类来代替ActiveRecord,例如:

  1. class EmailValidator <; ActiveModel::EachValidator  
  2.   def validate_each(record, attribute, value)  
  3.     record.errors[attribute] <;<; (options[:message] || "is not an email"unless  
  4.       value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i  
  5.   end  
  6. end  
  7.   
  8. class Person  
  9.   include ActiveModel::Validations  
  10.   attr_accessor :name:email  
  11.   
  12.   validates :name:presence => true:length => { :maximum => 100 }  
  13.   validates :email:presence => true:email => true  
  14. end  


原文地址: http://thelucid.com/2010/01/08/sexy-validation-in-edge-rails-rails-3/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值