rails自定义校验
来源:互联网 发布:部落冲突箭塔升级数据 编辑:程序博客网 时间:2024/05/20 05:30
其中,当有比较通用的规则需要校验时,优先考虑使用自定义校验器.
自定义校验器
给需要校验的单独属性添加自定义校验器最便捷的方法是使用 ActiveModel::EachCalidator。这种情况下,自定义校验类必须实现一个 validate_each 方法,它接受三个参数:record,attribute 和 value,它们分别代表model对象实例,被校验的属性和被校验属性的值。
- class DateValidator < ActiveModel::EachValidator
- def validate_each(record, attribute, value)
- if options[:after]
- unless record[options[:after]] < value
- record.errors[attribute] << options[:after_message]
- end
- end
- if options[:before]
- unless record[options[:before]] > value
- record.errors[attribute] << options[:before_message]
- end
- end
- end
- end
- class XXX < ActiveRecord::Base
- ......
- validates_numericality_of :price
- #定义日期之间关系
- validates :end_at, :date => {:after => :start_at, :after_message => "结束时间不能早于开始时间"}
- ......
- end
创建校验helper
创建自己的校验helpers,以便在多个model中复用.
在config/initializers文件夹下创建文件extend_validate.rb,代码如下:
- ActiveRecord::Base.class_eval do
- def self.validates_date_of(*attr_names)
- validates_with DateValidator, _merge_attributes(attr_names)
- end
- end
使用方法:
- class XXX < ActiveRecord::Base
- ......
- validates_numericality_of :price
- #定义日期之间关系
- validates_date_of :end_at ,:after=> :start_at,:after_message => "结束时间不能早于开始时间")
- ......
- end
完成效果:
0 0
- rails自定义校验
- rails自定义校验
- rails校验
- rails 校验图片格式
- Rails自动校验
- rails 校验大全(转载)
- Rails中的validate校验
- rails 校验中英文混合长度
- rails errors样式自定义
- rails 使用自定义SQL
- rails 国际化、validate校验、flash提示
- rails 国际化、validate校验、flash提示
- ext自定义校验
- jquery自定义校验
- Ofbiz: 自定义表单校验
- Ofbiz: 自定义表单校验
- jquery自定义校验
- Ofbiz: 自定义表单校验
- C++静态库与动态库
- Rails中Array转为ActiveRecord::Relation
- ubuntu 14.04 kylin 编译 android 5.0源码
- 《C语言及程序设计》程序阅读——洗牌
- oracle 数据库的概念
- rails自定义校验
- 琼海建“东部中心城市”,三亚失“最美国事活动”
- Mysql修改root账号密码
- 杭电ACM1162——Eddy's picture~~最小生成树
- hdu1282 回文数猜想 字符串操作
- 第六章 堆排序 C++
- 套接字编程原理
- JDK8新特性之接口
- Rails开发实录:建立用户与信息之间的关系