8

我想创建一个自定义验证函数,仅当当前字段在数据库中不为空时,才允许将字段保存为空/nil。如何在验证函数中访问数据库值(旧值)?我可以使用 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

现在,如果我尝试编辑现有对象,它不会接受新的空值,但是在创建新对象时,即使从未设置旧值,它也会说“一旦设置就不能为空”。

4

1 回答 1

9

您可以利用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
于 2012-09-09T08:09:58.683 回答