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 に答える