跳至内容 跳至搜索

Active Record 验证

Active Record 大部分验证来自 ActiveModel::Validations

在 Active Record 中,默认情况下,所有验证都在保存时执行。 Validations 接受 :on 参数来定义验证生效的上下文。Active Record 会根据模型是否为 new_record? 传递 :create:update 的上下文。

命名空间
方法
S
V

实例公共方法

save(**options)

可以通过传递 validate: false 跳过保存时的验证过程。可以通过传递 context: context 更改验证上下文。当混合验证模块时(默认情况下),将使用此方法替换常规的 ActiveRecord::Base#save 方法。

# File activerecord/lib/active_record/validations.rb, line 47
def save(**options)
  perform_validations(options) ? super : false
end

save!(**options)

尝试保存记录,就像 ActiveRecord::Base#save 一样,但如果记录无效,则会引发 ActiveRecord::RecordInvalid 异常,而不是返回 false

# File activerecord/lib/active_record/validations.rb, line 53
def save!(**options)
  perform_validations(options) ? super : raise_validation_error
end

valid?(context = nil)

在指定上下文中运行所有验证。如果未发现错误,则返回 true,否则返回 false

别名为 validate

如果参数为 false(默认值为 nil),则如果 new_record?true,则上下文设置为 :create,如果为 false,则上下文设置为 :update。如果参数是上下文的数组,post.valid?([:create, :update]),则在多个上下文中运行验证。

没有 :on 选项的验证将在任何上下文中运行。具有 :on 选项的验证仅在其指定的上下文中运行。

也称为: validate
# File activerecord/lib/active_record/validations.rb, line 69
def valid?(context = nil)
  context ||= default_validation_context
  output = super(context)
  errors.empty? && output
end

validate(context = nil)

别名为: valid?