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

On Thu, Feb 11, 2010 at 05:37, Hemant B. [email protected]
wrote:

Posted via http://www.ruby-forum.com/.


You received this message because you are subscribed to the Google G. “Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected].
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

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

On Feb 11, 12:51 pm, Mat B. [email protected] wrote:

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

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

Fred

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 …

On Thu, Feb 11, 2010 at 11:57, Frederick C.
[email protected] wrote:

Fred


You received this message because you are subscribed to the Google G. “Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected].
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Haha, duh, my bad.