本文概述
Rails验证为每个Active Record模型类定义有效状态。它们用于确保仅将有效的详细信息输入到数据库中。 Rails使向模型类添加验证变得容易, 并允许你创建自己的验证方法。使用内置的验证DSL, 你可以执行多种验证。
如果Active Record模型类的验证失败, 则将其视为错误。每个Active Record模型类都维护一个错误集合, 当发生验证错误时, 这些错误集合会向用户显示适当的错误信息。
Rails内置的验证方法
Method | Description |
---|---|
validates_acceptance_of | 用户通过选中复选框来完成此验证, 以接受服务条款协议 |
validates_associated | 验证关联对象本身是否全部有效。与任何类型的协会合作。 |
validates_confirmation_of | 它验证用户是否在第二个输入字段中输入了匹配的信息, 例如密码或电子邮件。 |
validates_each | 针对块验证每个属性。 |
validates_exclusion_of | 验证属性不在特定的可枚举对象中。 |
validates_format_of | 使用正则表达式验证属性的值, 以确保其格式正确。 |
validates_inclusion_of | 验证属性值在特定的可枚举对象中是否可用。 |
validates_length_of | 验证属性的长度是否与指定的长度限制匹配。 |
validates_numericality_of | 验证属性是否为数字。 |
validates_presence_of | 验证该属性是否为空。 |
validates_size_of | 这是validates_length_of的别名 |
validates_uniqueness_of | 验证属性在数据库中是否唯一。 |
跳过验证
下列Rails方法跳过验证并将对象保存到数据库中, 而不管其有效性如何。应谨慎使用它们。
- decrement!
- decrement_counter
- increment!
- increment_counter
- toggle!
- touch
- update_all
- update_attribute
有效?无效吗?(valid? and invalid?)
保存Active Record对象之前, Rails会进行验证。如果产生任何错误, 则不保存对象。
有效吗?触发你的验证, 如果未发现错误, 则返回true, 否则返回false。
例:
class Person < ApplicationRecord
??validates :name, presence: true
end
?
Person.create(name: "John Cena").valid? # => true
Person.create(name: nil).valid? # => false
无效的?是有效的反向吗?它触发你的验证, 如果无效则返回true, 否则返回false。