Easy Validation Question...

I'm trying to update the validation of one of my models to not allow emails from "bad-domain.com"

I already have this in my model:

  validates_format_of :email,                       :with => %r{\.(edu|com|gov|tv|biz|net|org|info|us|name|uk|jobs|tk|nz|de)$}i,                       :message => "Must be a valid email address"

That is working. But what kind of validation can I use to make sure that the :email doesn't contain "bad-domain.com"?

Unless I'm missing what you're trying to do, it would be the exact same approach:

   validates_format_of :email,        :with => /bad\-domain\.com$/i        :message => "bad-domain.com not allowed"

You might want to add this too (verifies it's at least x@x.xx) and then your original one can test the TLD specifically.

   validates_format_of :email,        :with => /^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$/i        :message => "Must be a valid email address"

Hmm, I was wondering if validates_exclusion_of would work, or is that for something else?

This is primarily for testing value lists. It verifies that the submitted value is within a specified set of options.

Duh. Brain fade. Use validates_each.

validates_each :email do |model, attr, value|    if value =~ /baddomain\.com/i      model.errors.add(attr, "bad-domain.com not allowed")    end end