`
jsntghf
  • 浏览: 2559868 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

组合验证不能为空

阅读更多

大家都知道validates_presence_of用来验证是否为空,那么,对几个属性进行组合验证是否为空,该怎么写呢?

 

下面举个简单的例子。

 

module ActiveRecord
  module Validations
    module ClassMethods
      def validates(*attr_names)
        msg = attr_names.collect {|a| a.is_a?(Array) ? " ( #{a.join(", ")} ) " : a.to_s}.join(", ") +
                    " can't all be blank.  At least one field  must be filled in."
        configuration = {
          :on => :save,
          :message => msg }
        configuration.update(attr_names.extract_options!)

        send(validation_method(configuration[:on]), configuration) do |record|
          found = false
          attr_names.each do |a|
            a = [a] unless a.is_a?(Array)
            found = true
            a.each do |attr|
              value = record.respond_to?(attr.to_s) ? record.send(attr.to_s) : record[attr.to_s]
              found = !value.blank?
            end
            break if found
          end
          record.errors.add_to_base(configuration[:message]) unless found
        end
      end
    end
  end
end

 

我们可以像这样去使用它:

 

validates :nickname, :passport, :password

 

这个用来验证nickname、passport和password是否均为空,三者只要有一个不为空,则验证通过。

 

我们还可以这样来用它:

 

validates :nickname, [:passport, :password]

 

这个用来验证nickname或者(passport和password)是否均为空,二者只要有一个不为空(后者必须均不为空),则验证通过。

 

具体如何将这个方法加入模块中,可以参考http://www.iteye.com/topic/521123

分享到:
评论
1 楼 gokure 2009-12-15  
很实用的方法,每次看到楼主的文章都是那么强, 佩服--景仰,哈哈

相关推荐

    jquery 表单验证之通过 class验证表单不为空

    首先,要实现通过class验证表单不为空,我们需要遵循以下步骤: 1. 为需要验证的表单元素(如`<input>`、`<select>`、`<textarea>`等)添加class,名称可以自定义,但需确保在同一页面内的一组需要验证的元素使用...

    WPF验证之——必填验证 .

    "WPF验证之——必填验证 ."这个主题主要探讨的是如何在WPF中实现对用户输入字段的必填验证,确保用户不为空的情况下提交数据。 首先,我们需要了解WPF的验证机制。WPF提供了数据绑定框架,它允许UI元素(如TextBox...

    常见的注册表单验证

    alert("真实姓名不能为空!"); return false; } // 密码验证 if($("#MemberPassword").val() == ""){ alert("密码不能为空!"); return false; } var pwd = document.getElementById("MemberPassword"); if...

    Validform验证时可以为空否则按照指定格式验证

    本知识点将详细介绍ValidForm在验证表单数据时,如何设定数据可以为空,或者当数据不为空时按照指定格式进行验证的使用方法和技巧。 在ValidForm的最新版本(例如5.3.2版)中,datatype属性被扩展为支持直接绑定...

    正则验证空与是否为移动手机号码.txt

    #### 二、正则验证空字符串 除了验证手机号码之外,我们还需要判断字符串是否为空或者仅包含空格。 ##### 2.1 正则表达式解析 ```java String regex = "^\\s*$"; ``` - `^`:字符串的起始位置。 - `\\s*`:匹配...

    C# 表单验证,验证表单

    以上方法覆盖了常见的表单字段验证需求,包括但不限于是否为空、是否包含特定字符、是否为数字、是否为英文字符以及字符串长度的检查。这些方法可以灵活组合使用,以满足不同的业务场景。通过这些基础的验证逻辑,...

    js验证大全,各种验证,很方便,很实用

    - **前端验证**:提高用户体验,快速反馈错误,但可能被绕过,因此不能替代后端验证。 - **后端验证**:提供额外的安全层,防止恶意用户绕过前端验证。 7. **库和框架的支持** - **jQuery Validate**:一个流行...

    WPF前台数据验证(红框)

    WPF前台数据验证(红框)(包括3.5和4.0两个版本) WPF 显示验证错误的默认方式是在控件周围绘制红色边框。...通过将 Styles 和一组与验证关联的附加属性进行组合,可以相当轻松地自定义验证错误显示。

    js表单验证代码 很全很强大

    1. **基本验证**:检查输入是否为空,这是最常见的验证,确保用户已填写所有必填字段。 2. **长度验证**:限制输入的字符数,例如用户名的长度不能超过20个字符。 3. **格式验证**:验证输入数据的格式,如电子邮件...

    js表单验证大全js表单验证大全js表单验证大全

    判断字符串`str`是否全为空格或空白字符,用于辅助`CheckData`函数检查字段是否为空。 #### istoolong(str, i) 检查字符串`str`是否超过了指定的最大长度`i`,同样作为`CheckData`函数的辅助函数。 ### 3. 高级...

    解决 qt QDateEdit 不能输入空值的问题。

    为了解决QDateEdit不能输入空值的问题,我们可以采用以下方法: 1. 自定义验证器:Qt允许我们为QLineEdit设置自定义的输入验证器(QValidator)。我们可以创建一个继承自QValidator的类,并重写其validate()函数,...

    jQuery formValidator高级表单验证

    1. **验证规则**:formValidator提供了许多内置的验证规则,如非空、邮箱、电话、数字范围等,可以根据需要选择或组合使用。 2. **实时验证**:在用户输入时,formValidator可以即时检查数据的有效性,显示错误提示...

    validate验证

    例如,你可能希望用户名字段不能为空,邮箱字段必须符合电子邮件格式,密码字段应包含特定字符组合等。 在描述中提到的"增加中文包",这可能是指`jQuery Validate`插件的国际化支持。为了适应不同地区用户的语言...

    java实现Ajax表单验证

    如果验证失败,返回一个表示错误的JSON,比如`{"status":"error","message":"用户名不能为空"}`。 4. 将处理结果写入HttpServletResponse,设置合适的响应头和内容类型(通常为"application/json")。 最后,前端...

    js注册验证代码大全

    否则返回`false`表示不为空。正确的实现应该是: ```javascript function isEmpty(ui) { if (ui == null || ui == "") { return true; } else { return false; } } ``` ### 2. 获取长度(支持多字节字符) ###...

    Spected用于根据定义的验证规则验证对象的底层验证库

    例如,如果你需要验证一个字段既不能为空,长度也不能超过10个字符,可以这样写: ```javascript const validation = object => { return Spected.object(object) .prop('fieldName', Spected.string().is...

    SVM_svmmatlab_svm参数寻优_SVM参数_交叉验证SVM_交叉验证,SVM

    在这个案例中,`SVM.m`可能是实现SVM参数优化的MATLAB代码,它可能包含了对不同参数组合的遍历和交叉验证过程。`BreastTissue_data.mat`可能是一个包含乳腺组织数据集的文件,这个数据集常用于SVM的示例和实验,帮助...

    本人推荐的几个表单验证

    本推荐集合包含了几个高效、实用的表单验证方法,特别是针对密码检验和防止表单字段为空等常见需求。下面我们将深入探讨这些验证技术。 1. **密码验证**: - **复杂度要求**:通常,密码应包含大小写字母、数字和...

    C# winform登陆验证功能

    - 用户名和密码的输入验证:确保用户名和密码不为空,避免特殊字符等不安全输入。 - 错误处理:处理可能的数据库连接问题,如文件不存在或权限问题。 5. **测试和调试**: - 输入不同的用户名和密码组合,测试...

    Jquery 正则表达式验证多个文本框.txt

    - 若不为空,则根据不同文本框的类型使用不同的正则表达式进行验证。 3. **正则表达式验证函数 `checkRGEX(id, patrn, val, valobj, error)`**: - **参数说明**: - `id`:当前文本框的ID。 - `patrn`:正则...

Global site tag (gtag.js) - Google Analytics