《Rails-Guides》Reading notes three:Active Record Validations

数据验证

        Rails 团队认为,模型层数据验证最具普适性。

        Active Record 执行验证后,所有发现的错误都可以通过实例方法 errors.messages 获取。该方法返回一个错误集合。如果数据验证后,这个集合为空,说明对象是有效的。使用 new 方法初始化对象时,即使无效也不会报错,因为只有保存对象时才会验证数据,例如调用 create 或 save 方法。若想检查对象的某个属性是否有效,可以使用 errors[:attribute]。errors[:attribute] 中包含与 :attribute 有关的所有错误。如果某个属性没有错误,就会返回空数组。

        若想查看是哪个验证导致属性无效的,可以使用 errors.details[:attribute]。它的返回值是一个由散列组成的数组,:error 键的值是一个符号,指明出错的数据验证。

confirmation

        如果要检查两个文本字段的值是否完全相同,使用这个辅助方法。例如,确认电子邮件地址或密码。这个验证创建一个虚拟属性,其名字为要验证的属性名后加 _confirmation。

        在视图模板中可以这么写:

exclusion

        这个辅助方法检查属性的值是否不在指定的集合中。集合可以是任何一种可枚举的对象。

format

        这个辅助方法检查属性的值是否匹配 :with 选项指定的正则表达式。或者,使用 :without 选项,指定属性的值不能匹配正则表达式。默认的错误消息是“is invalid”。

length

        这个辅助方法验证属性值的长度,有多个选项,可以使用不同的方法指定长度约束:

numericality

        这个辅助方法检查属性的值是否只包含数字。默认情况下,匹配的值是可选的正负符号后加整数或浮点数。如果只接受整数,把 :only_integer 选项设为 true。

presence

        这个辅助方法检查指定的属性是否为非空值。它调用 blank? 方法检查值是否为 nil 或空字符串,即空字符串或只包含空白的字符串。

absence

        这个辅助方法验证指定的属性值是否为空。它使用 present? 方法检测值是否为 nil 或空字符串,即空字符串或只包含空白的字符串。

on

        :on 选项指定什么时候验证。所有内置的验证辅助方法默认都在保存时(新建记录或更新记录)验证。如果想修改,可以使用 on: :create,指定只在创建记录时验证;或者使用 on: :update,指定只在更新记录时验证。

自定义验证类

        自定义的验证类继承自 ActiveModel::Validator,必须实现 validate 方法,其参数是要验证的记录,然后验证这个记录是否有效。自定义的验证类通过 validates_with 方法调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容