我想创建一个自定义验证函数,只有当数据库中的当前字段不为空时才允许将字段保存为空/零。如何在验证功能中访问数据库值(旧值)?我可以使用self.name_of_field访问新值。
这就是我现在所拥有的
validate :image_remote_url_change
def image_remote_url_change
if self.image_remote_url.blank? and self.image_remote_url_changed?
errors.add(:field, "can't be blank once set")
return false
end
end
现在,如果我尝试编辑现有对象,它将不会接受新的空值,但在创建新对象时,即使旧值未设置,也会显示“设置后不能为空”
答案 0 :(得分:7)
您可以利用ActiveModel::Dirty。在自定义验证功能中,您可以检查字段是否为空以及是否已更改:
validate :custom_validation_function
def custom_validation_function
if self.field.blank? and self.field_changed?
errors.add(:field, "can't be blank once set")
return false
end
end