version Rails 4.1
6. 执行个性化校验
当内建的校验辅助方法不能满足你的需求时, 你能够写你自己更喜欢的校验类或者校验方法.
6.1 Custom Validators 个性化校验
个性化校验是类(class), 该类继承ActiveModel::Validator. 这些类必须实现一个validate方法, 它会带入一个record作为一个参数, 然后对这个record执行校验. 个性化校验是通过使用 validates_with 方法来被调用的.
class MyValidator < ActiveModel::Validator
def validate(record)
unless record.name.starts_with? 'X'
record.errors[ :name ] << 'Need a name starting with X please!'
end
end
end class Person
include ActiveModel::Validations
validates_with MyValidator
end |
对于校验各个属性增加个性化校验最简单的方式是用ActiveModel::EachValidator的规则. 在这个例子中, 个性化校验类必须实现一个validate_each方法, 该方法有三个参数: record, attribute和value, 和实例相对应, 被校验的属性和属性的值都存在于被传入方法的实例中.
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value =~ /\ A ([^@\s]+)@((?:[-a-z0- 9 ]+\.)+[a-z]{ 2 ,})\z/i
record.errors[attribute] << (options[ :message ] || "is not an email" )
end
end
end class Person < ActiveRecord::Base
validates :email , presence: true , email: true
end |
正如在例子中显示的, 你同样结合标准的校验和你自己个性化的校验.
6.2 Custom Methods 个性化方法
你也能够创建方法来校验你模型的状态以及给errors集合增加信息, 当他们是无效的时候. 然后你必须要注册这些方法, 通过使用validate类的方法, 传入标志, 即校验方法名.
对于每一个方法你能够传入多于一个的标志, 各自的校验将会在同一个指令中运行, 正如他们被注册时那般.
class Invoice < ActiveRecord::Base
validate :expiration_date_cannot_be_in_the_past ,
:discount_cannot_be_greater_than_total_value
def expiration_date_cannot_be_in_the_past
if expiration_date.present? && expiration_date < Date.today
errors.add( :expiration_date , "can't be in the past" )
end
end
def discount_cannot_be_greater_than_total_value
if discount > total_value
errors.add( :discount , "can't be greater than total value" )
end
end
end |
默认情况下, 类似的校验在你每次调用valid?时, 将会运行. 同样也能控制, 当去运行这些个性化校验时, 通过给校验的方法后增加一个 :on 选项, 赋值 :create 或者 :update.
class Invoice < ActiveRecord::Base
validate :active_customer , on: :create
def active_customer
errors.add( :customer_id , "is not active" ) unless customer.active?
end
end |
相关推荐
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之间进行重大...
验证方式流星变量验证的基础安装meteor add zhaoyao91:validations 介绍该软件包定义了验证类,一个简单的架构,一些帮助根据架构构建验证树的函数以及一组内置验证。验证类别这是编写新的验证类的模板: /** * the ...
python库。 资源全名:cuenca_validations-0.9.17.dev6.tar.gz
是一个很棒的类似库Ember-validations 是一个 Ember.js 库,可以处理对象验证。 如果您必须检查对象属性的有效性,这个库会为您完成。 您只需要声明要验证的属性,以及要对该属性进行哪种验证。 这个库的灵感来自于...
@ ember-intl / cp-validations 在ember-cp-validations中增加了对支持 使用ember-i18n? 请参阅: 要求 > = 2.0.0-rc.5 ember-cp-validations > = 2 安装 ember install @ember-intl/cp-validations 配置中 在...
Laravel开发-laravel-validations 通用Laravel验证规则
当您在应用程序中需要 dm-validations' 时,DataMapper 验证功能可自动用于 DataMapper 资源。 无需手动包含任何内容,一旦需要此 gem,每个 DataMapper::Resource 都将能够处理验证。 指定模型验证 有两种主要...
Laravel开发-laravel-extended-validations 用于扩展默认Laravel验证的Laravel包
Angular-ionic-forms-and-validations.zip,使用这个Ionic示例应用程序学习如何处理Ionic 3和Angular 4中的表单和验证。在这个精彩的教程中,我们将介绍简单的和自定义的验证,并教您如何处理错误消息。,Angularjs于...
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: ...
python库。 资源全名:validations-libs-1.0.4.tar.gz
python库。 资源全名:db_validations-0.1.1.tar.gz
python库。 资源全名:cuenca_validations-0.9.8.dev1.tar.gz
python库。 资源全名:cuenca_validations-0.9.17.dev20.tar.gz
2012-EMC-Experimental Validations of a Simple PCB Interconnect Model for High-Rat
资源来自pypi官网。 资源全名:cuenca_validations-0.9.10.dev4.tar.gz
资源来自pypi官网。 资源全名:cuenca_validations-0.7.7.dev1.tar.gz
ClientSideValidations使您的Rails 5.x / Rails 6.x应用程序变得容易! 项目目标 遵循开发的客户端验证最佳实践 自动提取服务器上定义的验证规则并将其应用于客户端。 在服务器端验证规则无法在客户端上运行的情况...
资源来自pypi官网。 资源全名:cuenca_validations-0.9.0.0rc0.tar.gz
ember-bootstrap-cp-validations 此Ember插件在表单中添加了对基于支持。 这样,仅当基础数据有效时才提交表单,否则将应用适当的引导程序错误标记。 有关更多详细信息,请参见。兼容性灰烬引导v4 灰烬CP验证v4 ...