Active Record 验证
Active Record 大部分验证来自 ActiveModel::Validations
。
在 Active Record 中,默认情况下,所有验证都在保存时执行。 Validations
接受 :on
参数来定义验证生效的上下文。Active Record 会根据模型是否为 new_record? 传递 :create
或 :update
的上下文。
命名空间
方法
实例公共方法
save(**options) 链接
可以通过传递 validate: false
跳过保存时的验证过程。可以通过传递 context: context
更改验证上下文。当混合验证模块时(默认情况下),将使用此方法替换常规的 ActiveRecord::Base#save 方法。
源代码: 显示 | 在 GitHub 上
# 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
。
源代码: 显示 | 在 GitHub 上
# 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
源代码: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/validations.rb, line 69 def valid?(context = nil) context ||= default_validation_context output = super(context) errors.empty? && output end