跳至内容 跳至搜索

Active Record 验证

Active Record 从 ActiveModel::Validations 中包含了大部分验证功能。

在 Active Record 中,默认情况下所有验证都在保存时执行。 Validations 接受 :on 参数来定义验证激活的上下文。 Active Record 会根据模型是 new_record? 还是已存在记录,传入 :create:update 的上下文。

命名空间
方法
S
V

实例公共方法

save(**options)

可以通过传递 validate: false 来跳过保存时的验证过程。可以通过传递 context: context 来改变验证上下文。当包含 validations 模块时(默认就是如此),它会替换掉原始的 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 选项的验证仅在指定的上下文中运行。

Also aliased as: 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)

Alias for: valid?