`
jiajie0531
  • 浏览: 29290 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Active Record Validations 5 Conditional Validation 条件校验

阅读更多

version: Rails 4.1

 
5. 条件校验
 
有时当被给予的断言是满足条件的,才能去校验这个对象。你可以通过使用 :if 和 :unless 选项来实现,后面跟着的是一个标志,一个字符串,一段代码或者一个数组。当你想要执行校验时,你可以使用 :if 选项。当你想要不让校验发生时,那么你可以使用 :unless 选项。
 

5.1 Using a Symbol with :if and :unless 使用一个标志通过 :if 和 :unless

你可以把 :if 和 :unless 选项关联到一个标志,来对应到一个方法名,然后可以在校验之前来调用该方法。这是该选项应用的最多的情况。
 
class Order < ActiveRecord::Base
  validates :card_number, presence: true, if: :paid_with_card?
 
  def paid_with_card?
    payment_type == "card"
  end
end

5.2 Using a String with :if and :unless 使用一个字符串通过 :if 和 :unless

你同样也能够使用一个字符串, 使用 eval 来执行校验, 其中需要包含有效的 Ruby 代码. 当字符串是一个真正的简短条件, 你应该只要使用这个选项.
class Person < ActiveRecord::Base
  validates :surname, presence: true, if: "name.nil?"
end

5.3 Using a Proc with :if and :unless 使用一段代码, 通过 :if 和 :unless

最后, 可能通过 :if 和 :unless 后跟着一段被调用的代码对象. 使用一个代码对象来给予你编写内部条件的能力, 来替代一个单独的方法. 这个选项最好是用一行代码来解决.
class Account < ActiveRecord::Base
  validates :password, confirmation: true,
    unless: Proc.new { |a| a.password.blank? }
end

5.4 Grouping Conditional validations 分组条件的校验

有时候使用一个条件来进行多个校验是非常有用的, 使用 with_options 可以简单地来实现.
class User < ActiveRecord::Base
  with_options if: :is_admin? do |admin|
    admin.validates :password, length: { minimum: 10 }
    admin.validates :email, presence: true
  end
end

在 with_options 代码块里所有的校验都会自动地传入条件 if: :is_admin?

 

5.5 Combining Validation Conditions 结合校验的条件

另一方面, 当多个条件定义是否让一个校验发生, 一个数组(Array)能够被用到. 你能够在同一个校验中同时调用 :if 和 :unless.
class Computer < ActiveRecord::Base
  validates :mouse, presence: true,
                    if: ["market.retail?", :desktop?]
                    unless: Proc.new { |c| c.trackpad.present? }
end

当所有的 :if 条件为true 和没有 :unless条件为true的情况下, 校验才能执行.

 
 
0
1
分享到:
评论

相关推荐

    meteor-validations:流星变量验证的基础

    验证方式流星变量验证的基础安装meteor add zhaoyao... * @param {array} params - a validation can have params if it needs * @param {array} validations - a validation can have sub validations if it needs */

    struts验证框架-validation的验证框架

    - **Validation**:标记一个类需要被校验,通常配合Struts的配置文件使用。 ### 验证器类型详解 1. **ConversionErrorFieldValidator**:用于检测字段转换时是否出现错误,例如将字符串转换为日期时的异常情况。 2...

    ember-validations:Ember Validation的一个分支,修复了非Ember-CLI安装中不支持的某些问题

    Zipscene灰烬验证 Ember Validation的一个分支,它修复了非Ember-CLI安装中不支持的某些问题。 这些更改似乎是在Ember CLI版本中实现的,因此,只要有必要,就可以将其删除。

    spring注解-validation所用到的jar包

    在Spring框架中,注解和Validation是两个关键的组件,它们极大地简化了应用程序的开发过程。Validation主要用于数据验证,而Spring注解则提供了声明式编程的能力,使得代码更加简洁、可读性更强。这里我们将详细探讨...

    Struts 2 数据校验功能及校验问题的解决方案

    为了处理更复杂的数据校验场景,Struts 2支持使用Validator插件,它可以读取XML配置文件或者使用JSR 303/JSR 349(Bean Validation)标准来进行校验。通过Validator插件,可以定义全局的校验规则,复用性强,同时也...

    jsp字段校验与非字段校验

    **JSP字段校验与非字段校验** 在Web开发中,数据验证是必不可少的一环,它可以确保用户输入的数据符合应用程序的要求,防止错误的数据进入系统。JSP(JavaServer Pages)作为Java EE平台上的动态网页技术,提供了...

    Android代码-java-validation

    A lib to make validations on java objects How add it Add the repository to your build.gradle with: repositories { maven { url "https://jitpack.io" } } and on your project dependencies: dependencies {...

    struts2 校验框架

    - 除了XML配置,Struts2还支持使用Java注解进行校验,比如`@RequiredFieldValidator`,`@Validations`等,使得代码更加简洁且易于维护。 4. **字段级和动作级验证**: - 字段级验证针对单个表单字段,而动作级...

    ASP.NET MVC Validation Library

    The library uses the Validation Application Block (VAB) included in the MS Enterprise Library 4.1 to perform server-side validations for entities annotated with validation attributes. On the client-...

    XLSReadWriteII v5.20.14 for Delphi 7 & RAD Studio XE-XE5 (x32) Cracked

    5.20.14 ! There could be an AV when using multiple instances of the component. 5.20.13 + It's now possible to write unusual URL:s, like "oink://SaysTheSow". The condition is: a string of ascii chars ...

    一个简单的struts校验例子

    5. 使用 strut-validation.jar 和 commons-logging.jar:为了实现Struts的验证功能,项目中需要包含这两个库文件。`strut-validation.jar`包含了Struts的验证组件,而`commons-logging.jar`则提供了日志记录支持。 ...

    Python库 | validations-libs-1.0.4.tar.gz

    5. `src/`或`validations.libs/`:存放库的源代码,通常包含一个或多个Python模块或包。 6. `tests/`:测试代码,确保库的各个部分按预期工作。 7. `docs/`:文档目录,包括用户指南、API参考等。 在Python中,`...

    ember-i18n-cp-validations:ember-i18n支持ember-cp-validations

    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之间进行重大...

    swagger-restify-validation:与 node-restify-validations 集成的 swagger-tools 的中间件扩展

    与 node-restify-validations 集成的 swagger-tools 的中间件扩展 安装 npm install swagger-restify-validation --save 用法 需要 swagger-restify 验证, var restifyValidation = require('swagger-restify-...

    cp-validations:ember-intl对ember-cp-validations的支持

    @ ember-intl / cp-validations 在ember-cp-validations中增加了对支持 使用ember-i18n? 请参阅: 要求 &gt; = 2.0.0-rc.5 ember-cp-validations &gt; = 2 安装 ember install @ember-intl/cp-validations 配置中 在...

    ember-validations:Ember-Validations - 用于处理对象验证的 Ember.js 库

    是一个很棒的类似库Ember-validations 是一个 Ember.js 库,可以处理对象验证。 如果您必须检查对象属性的有效性,这个库会为您完成。 您只需要声明要验证的属性,以及要对该属性进行哪种验证。 这个库的灵感来自于...

    实现校验功能的Android类库

    源码AwesomeValidation,只需三步便可实现Android Validation校验功能,使得开发者重点关注他们的代码,校验的事情交给AwesomeValidation类库。它可以使得Android应用的布局代码更加整洁。可以校验数字类型,日期,...

    Python库 | db_validations-0.1.1.tar.gz

    《Python数据库验证库db_validations详解》 在Python编程领域,数据库操作是后端开发中的重要环节,确保数据的有效性和一致性至关重要。db_validations库,正如其名,专注于提供数据库验证功能,帮助开发者构建更加...

    Android代码-Android-EditText-Validations

    This library is best used with Kotlin, and is to help reduce boilerplate code when writing validation rules for EditText fields. To install: Add Jitpack to your repositories in your build.gradle file ...

    Python库 | cuenca_validations-0.9.17.dev20.tar.gz

    《Python库cuenca_validations详解》 在Python的生态系统中,库扮演着至关重要的角色,它们提供了丰富的功能,使得开发者能够高效地构建各种应用程序。本文将深入探讨名为`cuenca_validations`的Python库,它在...

Global site tag (gtag.js) - Google Analytics