Validates_uniqueness_of problem

Hi guys,

I have given a validation function (validates_uniqueness_of :email) in my model because i want email to be unique.

So the problem is that whenever i want to update a record then also it validates. I mean i dont want it to validate while updating the record. It should happen only when i am creating a new record.

I tried these methods,

1) :on => { :create } options is not working. 2) before_save :check_duplication

   def check_duplication      ModelName.validates_**_of :email    end

But still snatching my head over it.. IF these two ways are not working what way it will work?

I dont understand why you want to validate uniqueness only on create. Isnt it a problem if email is changed later to an address that already exists?

The :on parameter is not available for validates_uniqueness_of, probably because it doesnt make any sense.

If you really want to make the validation happen only on create you can do before_validation_on_create :check_duplication

The reason that your approach doesn't work is that you're still calling validates_uniqueness_of on your class. This is telling it, "from now on, check uniqueness of this column any time the record is saved". In effect, it's no different from just putting that code directly in the class body.

You can use the :if option:

class ModelName   validates_uniqueness_of :email, :if => proc { |model| model.new_record? } end

The reason that your approach doesn't work is that you're still calling validates_uniqueness_of on your class. This is telling it, "from now on, check uniqueness of this column any time the record is saved". In effect, it's no different from just putting that code directly in the class body.

You can use the :if option:

class ModelName   validates_uniqueness_of :email, :if => proc { |model| model.new_record? } end

Thanks Resolved .. worked like a charm .. :slight_smile:

Cheers ..

and in cases like this where you just want to call a method you can do :if => :new_record?

Fred

Haha, duh, my bad.