- V
实例公共方法
validates_absence_of(*attr_names) 链接
验证指定的属性是否为空(如 Object#present? 定义)。
class Person < ActiveRecord::Base validates_absence_of :first_name end
first_name 属性必须在对象中,并且必须为空。
配置选项
- 
:message- 自定义错误消息(默认为:“必须为空”)。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/absence.rb, line 28 def validates_absence_of(*attr_names) validates_with AbsenceValidator, _merge_attributes(attr_names) end
validates_acceptance_of(*attr_names) 链接
封装了验证服务条款复选框(或类似协议)是否被接受的模式。
class Person < ActiveRecord::Base validates_acceptance_of :terms_of_service validates_acceptance_of :eula, message: 'must be abided' end
如果数据库字段不存在,terms_of_service 属性将完全是虚拟的。仅当 terms_of_service 不为 nil 时执行此检查。
配置选项
- 
:message- 自定义错误消息(默认为:“必须被接受”)。
- 
:accept- 指定一个被视为已接受的值。也接受一个可能值的数组。默认值是数组 [“1”, true],这使得它易于与 HTML 复选框相关联。当验证数据库字段时,应将其设置为true或包含true,因为在验证之前,属性会从“1”类型转换为true。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/acceptance.rb, line 108 def validates_acceptance_of(*attr_names) validates_with AcceptanceValidator, _merge_attributes(attr_names) end
validates_comparison_of(*attr_names) 链接
验证指定属性的值是否满足与另一个值、proc 或属性的所有已定义比较。
class Person < ActiveRecord::Base validates_comparison_of :value, greater_than: 'the sum of its parts' end
配置选项
- 
:message- 自定义错误消息(默认为:“比较失败”)。
- 
:greater_than- 指定值必须大于所提供的值。此选项的默认错误消息是 _“必须大于 %{count}”_。
- 
:greater_than_or_equal_to- 指定值必须大于或等于所提供的值。此选项的默认错误消息是 _“必须大于或等于 %{count}”_。
- 
:equal_to- 指定值必须等于所提供的值。此选项的默认错误消息是 _“必须等于 %{count}”_。
- 
:less_than- 指定值必须小于所提供的值。此选项的默认错误消息是 _“必须小于 %{count}”_。
- 
:less_than_or_equal_to- 指定值必须小于或等于所提供的值。此选项的默认错误消息是 _“必须小于或等于 %{count}”_。
- 
:other_than- 指定值必须不等于所提供的值。此选项的默认错误消息是 _“必须不等于 %{count}”_。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
验证器要求至少提供以下一项检查。每项都可以接受一个 proc、值或对应于方法的符号
- 
:greater_than
- 
:greater_than_or_equal_to
- 
:equal_to
- 
:less_than
- 
:less_than_or_equal_to
- 
:other_than
例如
class Person < ActiveRecord::Base validates_comparison_of :birth_date, less_than_or_equal_to: -> { Date.today } validates_comparison_of :preferred_name, other_than: :given_name, allow_nil: true end
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/comparison.rb, line 85 def validates_comparison_of(*attr_names) validates_with ComparisonValidator, _merge_attributes(attr_names) end
validates_confirmation_of(*attr_names) 链接
封装了验证密码或电子邮件地址字段及其确认字段的模式。
Model:
  class Person < ActiveRecord::Base
    validates_confirmation_of :user_name, :password
    validates_confirmation_of :email_address,
                              message: 'should match confirmation'
  end
View:
  <%= password_field "person", "password" %>
  <%= password_field "person", "password_confirmation" %>
添加的 password_confirmation 属性是虚拟的;它仅作为内存属性用于验证密码。为此,验证会向模型添加确认属性的访问器。
注意:仅当 password_confirmation 不为 nil 时才执行此检查。要强制要求确认,请确保为确认属性添加存在性检查
validates_presence_of :password_confirmation, if: :password_changed?
配置选项
- 
:message- 自定义错误消息(默认为:“不匹配%{translated_attribute_name}”)。
- 
:case_sensitive- 查找精确匹配。非文本列会忽略此项(默认为true)。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/confirmation.rb, line 75 def validates_confirmation_of(*attr_names) validates_with ConfirmationValidator, _merge_attributes(attr_names) end
validates_exclusion_of(*attr_names) 链接
验证指定属性的值是否不包含在特定的可枚举对象中。
class Person < ActiveRecord::Base validates_exclusion_of :username, in: %w( admin superuser ), message: "You don't belong here" validates_exclusion_of :age, in: 30..60, message: 'This site is only for under 30 and over 60' validates_exclusion_of :format, in: %w( mov avi ), message: "extension %{value} is not allowed" validates_exclusion_of :password, in: ->(person) { [person.username, person.first_name] }, message: 'should not be the same as your username or first name' validates_exclusion_of :karma, in: :reserved_karmas end
配置选项
- 
:in- 一个可枚举的对象,其中包含不应包含的值。这可以作为 proc、lambda 或返回可枚举对象的符号提供。如果可枚举对象是数字、时间或日期时间范围,则使用Range#cover?进行测试,否则使用include?。使用 proc 或 lambda 时,会将正在验证的实例作为参数传递。
- 
:within-:in的同义词(或别名)。使用Range#cover?进行测试,否则使用include?。
- 
:message- 指定自定义错误消息(默认为:“已被保留”)。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/exclusion.rb, line 44 def validates_exclusion_of(*attr_names) validates_with ExclusionValidator, _merge_attributes(attr_names) end
validates_format_of(*attr_names) 链接
根据提供的正则表达式,验证指定属性的值是否格式正确。你可以要求属性匹配正则表达式
class Person < ActiveRecord::Base validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create end
或者,你可以要求指定属性不匹配正则表达式
class Person < ActiveRecord::Base validates_format_of :email, without: /NOSPAM/ end
你还可以提供一个 proc 或 lambda,它将确定用于验证属性的正则表达式。
class Person < ActiveRecord::Base # Admin can have number as a first letter in their screen name validates_format_of :screen_name, with: ->(person) { person.admin? ? /\A[a-z0-9][a-z0-9_\-]*\z/i : /\A[a-z][a-z0-9_\-]*\z/i } end
注意:使用 \A 和 \z 匹配字符串的开头和结尾,而 ^ 和 $ 匹配行的开头/结尾。
由于经常误用 ^ 和 $,如果提供的正则表达式包含这些锚点,你需要传递 multiline: true 选项。在大多数情况下,你应该使用 \A 和 \z。
你必须同时提供 :with 或 :without 作为选项。此外,两者都必须是正则表达式或 proc 或 lambda,否则将引发异常。
配置选项
- 
:message- 自定义错误消息(默认为:“无效”)。
- 
:with- 如果属性匹配该正则表达式,则验证成功。这可以作为返回正则表达式的 proc 或 lambda 提供,并在运行时调用。
- 
:without- 如果属性不匹配该正则表达式,则验证成功。这可以作为返回正则表达式的 proc 或 lambda 提供,并在运行时调用。
- 
:multiline- 如果你的正则表达式包含匹配行开头或结尾(而不是字符串开头或结尾)的锚点(^和$),则设置为 true。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/format.rb, line 107 def validates_format_of(*attr_names) validates_with FormatValidator, _merge_attributes(attr_names) end
validates_inclusion_of(*attr_names) 链接
验证指定属性的值是否包含在特定的可枚举对象中。
class Person < ActiveRecord::Base validates_inclusion_of :role, in: %w( admin contributor ) validates_inclusion_of :age, in: 0..99 validates_inclusion_of :format, in: %w( jpg gif png ), message: "extension %{value} is not included in the list" validates_inclusion_of :states, in: ->(person) { STATES[person.country] } validates_inclusion_of :karma, in: :available_karmas end
配置选项
- 
:in- 一个包含可用项目列表的可枚举对象。这可以作为 proc、lambda 或返回可枚举对象的符号提供。如果可枚举对象是数字、时间或日期时间范围,则使用Range#cover?进行测试,否则使用include?。使用 proc 或 lambda 时,会将正在验证的实例作为参数传递。
- 
:within-:in的同义词(或别名)。
- 
:message- 指定自定义错误消息(默认为:“不在列表中”)。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/inclusion.rb, line 42 def validates_inclusion_of(*attr_names) validates_with InclusionValidator, _merge_attributes(attr_names) end
validates_length_of(*attr_names) 链接
验证指定属性是否符合提供的长度限制。除了 :minimum 和 :maximum 可以组合使用外,一次只能使用一个约束选项
class Person < ActiveRecord::Base validates_length_of :first_name, maximum: 30 validates_length_of :last_name, maximum: 30, message: "less than 30 if you don't mind" validates_length_of :fax, in: 7..32, allow_nil: true validates_length_of :phone, in: 7..32, allow_blank: true validates_length_of :user_name, within: 6..20, too_long: 'pick a shorter name', too_short: 'pick a longer name' validates_length_of :zip_code, minimum: 5, too_short: 'please enter at least 5 characters' validates_length_of :smurf_leader, is: 4, message: "papa is spelled with 4 characters... don't play me." validates_length_of :words_in_essay, minimum: 100, too_short: 'Your essay must be at least 100 words.' private def words_in_essay essay.scan(/\w+/) end end
约束选项
- 
:minimum- 属性的最小长度。
- 
:maximum- 属性的最大长度。如果不与:minimum一起使用,默认允许nil。
- 
:is- 属性的确切长度。
- 
:within- 指定属性最小和最大长度的范围。
- 
:in-:within的同义词(或别名)。
其他选项
- 
:allow_nil- 属性可以是nil;跳过验证。
- 
:allow_blank- 属性可以是空的;跳过验证。
- 
:too_long- 属性超出最大长度时的错误消息(默认为:“太长(最大长度为 %{count} 个字符)”)。
- 
:too_short- 属性低于最小长度时的错误消息(默认为:“太短(最小长度为 %{count} 个字符)”)。
- 
:wrong_length- 使用:is方法时,属性长度不正确的错误消息(默认为:“长度错误(应为 %{count} 个字符)”)。
- 
:message- 用于:minimum、:maximum或:is违规的错误消息。是相应too_long/too_short/wrong_length消息的别名。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/length.rb, line 123 def validates_length_of(*attr_names) validates_with LengthValidator, _merge_attributes(attr_names) end
validates_numericality_of(*attr_names) 链接
通过尝试将指定属性的值转换为浮点数(如果 only_integer 为 false)或将其应用于正则表达式 /\A[+\-]?\d+\z/(如果 only_integer 设置为 true),来验证该值是否为数字。Kernel.Float 值的精度最多可保证 15 位。
class Person < ActiveRecord::Base validates_numericality_of :value, on: :create end
配置选项
- 
:message- 自定义错误消息(默认为:“不是数字”)。
- 
:only_integer- 指定值是否必须是整数(默认为false)。
- 
:only_numeric- 指定值是否必须是Numeric的实例(默认为false)。默认行为是尝试解析字符串值。
- 
:allow_nil- 如果属性为nil,则跳过验证(默认为false)。请注意,对于Integer和Float列,空字符串会被转换为nil。
- 
:greater_than- 指定值必须大于所提供的值。此选项的默认错误消息是 _“必须大于 %{count}”_。
- 
:greater_than_or_equal_to- 指定值必须大于或等于所提供的值。此选项的默认错误消息是 _“必须大于或等于 %{count}”_。
- 
:equal_to- 指定值必须等于所提供的值。此选项的默认错误消息是 _“必须等于 %{count}”_。
- 
:less_than- 指定值必须小于所提供的值。此选项的默认错误消息是 _“必须小于 %{count}”_。
- 
:less_than_or_equal_to- 指定值必须小于或等于所提供的值。此选项的默认错误消息是 _“必须小于或等于 %{count}”_。
- 
:other_than- 指定值必须不等于所提供的值。此选项的默认错误消息是 _“必须不等于 %{count}”_。
- 
:odd- 指定值必须是奇数。此选项的默认错误消息是 _“必须为奇数”_。
- 
:even- 指定值必须是偶数。此选项的默认错误消息是 _“必须为偶数”_。
- 
:in- 检查值是否在某个范围内。此选项的默认错误消息是 _“必须在 %{count} 范围内”_。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
以下检查也可以作为 proc 或对应于方法的符号提供
- 
:greater_than
- 
:greater_than_or_equal_to
- 
:equal_to
- 
:less_than
- 
:less_than_or_equal_to
- 
:only_integer
- 
:other_than
例如
class Person < ActiveRecord::Base validates_numericality_of :width, less_than: ->(person) { person.height } validates_numericality_of :width, greater_than: :minimum_weight end
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/numericality.rb, line 217 def validates_numericality_of(*attr_names) validates_with NumericalityValidator, _merge_attributes(attr_names) end
validates_presence_of(*attr_names) 链接
验证指定属性不为空(如 Object#blank? 定义)。
class Person < ActiveRecord::Base validates_presence_of :first_name end
first_name 属性必须在对象中,并且不能为空。
如果你想验证布尔字段的存在性(实际值为 true 和 false),你应该使用 validates_inclusion_of :field_name, in: [true, false]。
这是因为 Object#blank? 处理布尔值的方式:false.blank? # => true。
配置选项
- 
:message- 自定义错误消息(默认为:“不能为空”)。
此外,还有所有验证器都支持的默认选项列表::if、:unless、:on、:allow_nil、:allow_blank 和 :strict。有关更多信息,请参阅 ActiveModel::Validations::ClassMethods#validates。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/validations/presence.rb, line 34 def validates_presence_of(*attr_names) validates_with PresenceValidator, _merge_attributes(attr_names) end