version Rails 4.1
- 如何去使用内建的Active Record 校验helpers.
- 如何去创建你自己定制化的校验方法.
- 如何在校验的过程中去获取生成的错误信息.
1 Validations Overview 校验概述
class Person < ActiveRecord::Base
validates :name , presence: true
end Person.create(name: "John Doe" ).valid? # => true
Person.create(name: nil ).valid? # => false
|
正如你所看到的, 我们的校验让我们知道, 我们的 Person 没有一个name的特性是无效的. 第二个 Person 将不会被保存到数据库中去.
1.1 Why Use Validations? 为什么要使用校验?
- 数据库的限制条件 和/或者 存储过程使得校验机制与数据库无关,能够使得测试和维护变得更困难。然而, 如果你的数据库被其他的应用所使用, 那么在数据库级别使用一些限制会是一个好方法. 额外地, 数据库级别(database-level)校验能够安全地处理一些东西(类似于在高频率使用的数据表里采用唯一性), 不同地是这些实现起来有点困难.
- 客户端的校验是很有用的, 但如果独自使用时通常不是很可靠. 如果他们是用 JavaScript 来实现的, 他们可能被忽略, 如果 JavaScript 被用户的浏览器禁止. 然而, 如果结合其他的技术, 客户端校验能够以很方便的方式给用户提供及时的反馈, 当他们使用你的站点时.
- 控制器级别(Controller-level)的校验很容易使用, 但常常会使测试和维护变得笨重和困难. 只要有可能, 保持你的控制器精简是个好方法, 使得你的应用能够有一个良好的状态来长时间运行.
1.2 When Does Validation Happen? 校验在什么时候发生呢?
class Person < ActiveRecord::Base
end |
我们可以看一下它是如何工作的, 通过 rails console 的输出内容:
$ bin/rails console >> p = Person. new (name: "John Doe" )
=> #<Person id: nil, name: "John Doe", created_at: nil, updated_at: nil>
>> p.new_record? => true
>> p.save => true
>> p.new_record? => false
|
创建和保存一个新的记录将会发送一个 INSERT 的SQL操作给数据库. 更新一个已存在的记录将会发送一个 UPDATE 的SQL操作. 校验通常是在这些命令被发送到数据库之前运行的. 如果任何的校验失败, 那么这个对象将会被标记为无效, 而Active Record 将不会去执行 INSERT 或者 UPDATE 操作. 这就会避免保存一个无效的对象到数据库里. 你可以选择用一个指定的校验来运行, 当一个对象被创建, 保存, 或者更新的时候.
warning: 有许多种方式来改变数据库中的对象状态. 一些方法会触发校验, 但有些就不会. 这也就意味着, 如果你不注意, 很有可能保存对象到数据里时是一个无效的状态.
下面的方法会触发校验, 只有当对象有效时才会把对象保存:
create
create!
save
save!
update
update!
有感叹号的版本(例如, save!)抛出一个异常, 当记录是无效的时候. 没有感叹号的版本则不会, save 和 update 返回 false, create 则会返回一个对象.
1.3 Skipping Validations 跳过的校验
decrement!
decrement_counter
increment!
increment_counter
toggle!
touch
update_all
update_attribute
update_column
update_columns
update_counters
注意, save 也能跳过校验, 如果传入的参数为 validate: false. 这个方法使用的时候也要注意.
save(validate: false)
1.4 valid?
and invalid? 有效? 无效?
class Person < ActiveRecord::Base
validates :name , presence: true
end Person.create(name: "John Doe" ).valid? # => true
Person.create(name: nil ).valid? # => false
|
在 Active Record 已经执行完校验之后, 任何的错误都能通过 errors.messages 实例方法中找到, 它会返回一连串的错误信息. 当然地, 如果运行完校验后这个错误集合是空的, 那么这一个对象是有效的.
注意, 对象是通过 new 来实例化的, 这不会产生错误信息, 即使它理论上是无效的, 因为在使用 new 时, 校验还没有开始执行.
class Person < ActiveRecord::Base
validates :name , presence: true
end >> p = Person. new
# => #<Person id: nil, name: nil> >> p.errors.messages # => {} >> p.valid? # => false >> p.errors.messages # => {name:["can't be blank"]} >> p = Person.create # => #<Person id: nil, name: nil> >> p.errors.messages # => {name:["can't be blank"]} >> p.save # => false >> p.save! # => ActiveRecord::RecordInvalid: Validation failed: Name can't be blank >> Person.create! # => ActiveRecord::RecordInvalid: Validation failed: Name can't be blank |
invalid? 就是 valid? 的互逆. 它触发了你的校验, 当在对象中有任何错误信息时, 返回 true, 否则就返回 false.
1.5 errors[] 错误数组
class Person < ActiveRecord::Base
validates :name , presence: true
end >> Person. new .errors[ :name ].any? # => false
>> Person.create.errors[ :name ].any? # => true
|
我们将会进一步地了解校验的错误信息在 Working with Validation Errors 部分. 至于现在, 让我们转到内建的校验 helpers, 这是 Rails 默认提供的.
相关推荐
本文将深入探讨一个名为`cuenca_validations`的Python库,该库的最新版本为0.9.8.dev1。我们将从其核心功能、安装方法、使用示例以及与其他库的集成等方面进行详细解析。 `cuenca_validations`是一个专门用于处理...
《PyPI官网下载:cuenca_validations-0.7.7.dev1.tar.gz——深入理解Python库的构建与发布》 在Python的世界里,PyPI(Python Package Index)是官方的软件仓库,它为开发者提供了发布和分享自己创建的Python库的...
Struts 2的数据校验还可以通过注解方式进行,使用@FieldCheck、@Validations等注解来指定字段的校验规则。这种方式更加直观,减少了代码量,但可能需要额外的库支持。 为了处理更复杂的数据校验场景,Struts 2支持...
ember-i18n-cp-validations 在ember-cp-validations中增加了对ember-i18n的支持 使用ember-intl? 请参阅: 安装 ember install ember-i18n-cp-validations 在ember-i18n-cp-validations中在2.x和3.x之间进行重大...
一、`cuenca_validations`概述 `cuenca_validations`是专门为Cuenca平台设计的一个验证库,该平台可能涉及到支付、转账、账单管理等金融业务。此库提供了许多预定义的验证规则,帮助开发者快速检查并确认输入数据...
验证方式流星变量验证的基础安装meteor add zhaoyao91:validations 介绍该软件包定义了验证类,一个简单的架构,一些帮助根据架构构建验证树的函数以及一组内置验证。验证类别这是编写新的验证类的模板: /** * the ...
**JSP字段校验与非字段校验** 在Web开发中,数据验证是必不可少的一环,它可以确保用户输入的数据符合应用程序的要求,防止错误的数据进入系统。JSP(JavaServer Pages)作为Java EE平台上的动态网页技术,提供了...
标题中的"Python库 | validations-libs-1.0.4.tar.gz"表明这是一个与Python相关的库,名为"validations-libs",版本号为1.0.4,且已打包成tar.gz格式的压缩文件。在Python编程中,库(Library)是预先编写好的代码...
《Python数据库验证库db_validations详解》 在Python编程领域,数据库操作是后端开发中的重要环节,确保数据的有效性和一致性至关重要。db_validations库,正如其名,专注于提供数据库验证功能,帮助开发者构建更加...
是一个很棒的类似库Ember-validations 是一个 Ember.js 库,可以处理对象验证。 如果您必须检查对象属性的有效性,这个库会为您完成。 您只需要声明要验证的属性,以及要对该属性进行哪种验证。 这个库的灵感来自于...
《Python库cuenca_validations详解》 在Python的开发世界中,库是开发者们的重要工具,它们提供了丰富的功能,让编程工作变得更加高效。本文将深入探讨名为`cuenca_validations`的Python库,该库是版本0.9.17.dev6...
@ ember-intl / cp-validations 在ember-cp-validations中增加了对支持 使用ember-i18n? 请参阅: 要求 > = 2.0.0-rc.5 ember-cp-validations > = 2 安装 ember install @ember-intl/cp-validations 配置中 在...
《PyPI官网下载:cuenca_validations-0.9.10.dev4.tar.gz——深入解析Python库的构建与发布》 PyPI(Python Package Index),是Python开发者的重要资源库,它为全球的Python爱好者提供了无数开源软件包和模块,...
《PyPI官网下载:tripleo_validations-8.4.2-py2-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是最重要的软件仓库,它为开发者提供了一个平台来发布和分享他们的Python软件包。标题中的"PyPI ...
**Python库:cuenca_validations** `cuenca_validations`是一个专为Python开发者设计的库,主要用于处理与Cuenca API交互时的数据验证。Cuenca是一个金融技术平台,提供API接口来处理支付、转账等金融业务。`cuenca...
《PyPI官网下载:cuenca_validations-0.9.0.0rc0.tar.gz——探索Python库在分布式环境中的应用》 PyPI(Python Package Index)是Python社区广泛使用的软件包仓库,它提供了丰富的Python库供开发者下载和使用。在...
1. **日期范围验证**:允许开发者设定一个日期字段必须在特定的日期范围内,例如`date_between:startDate,endDate`。 2. **文件类型验证**:除了默认的`mimes`规则,可能还提供了更灵活的文件类型验证,如检查文件...
本教程将深入探讨`laravel-validations`,这是Laravel中的验证机制,它提供了一种优雅的方式来处理输入数据的验证。 **一、验证基础** 1. **验证控制器方法**:在控制器中,我们通常会在处理用户请求的方法内进行...
1. **XML配置校验**: - Struts2允许通过XML配置文件定义校验规则,这些规则与Action类关联。在`struts.xml`中,你可以使用`<validate>`标签来指定一个Action对应的校验文件。 2. **校验文件**: - 校验规则通常...
Android EditText Validations Easily Validate EditTexts This library is best used with Kotlin, and is to help reduce boilerplate code when writing validation rules for EditText fields. To install: ...