Rails:在验证编辑期间比较旧值和新值

时间:2012-09-09 07:51:56

标签: ruby-on-rails

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

现在,如果我尝试编辑现有对象,它将不会接受新的空值,但在创建新对象时,即使旧值未设置,也会显示“设置后不能为空”

1 个答案:

答案 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