Rails 3 Validation for special values

Hi everybody,

I am creating a site, where people can register, but i only want them
to register, if they have a legit code. So let's say I give out the
three codes "code1", "code2" and "code3". How can I make sure, that
the user only gets registered, when the code gets vaildated?

Validate :registration_code => presence => true, ??? => ???

Do I have to write a custom method where I define all the possible
codes or how would you do it?

Thanks for your help!

Probably “validates_inclusion_of” can help you.



The easiest way is probably to just define a custom method and use that for validation:

validate :registration_code_must_be_valid

def registration_code_must_be_valid

check if it’s one of the hard coded values

unless [ ‘code1’, ‘code2’ ].include?(registration_code)

errors.add(:registration_code, "must be valid")


or check if it’s in another model if you want to do it dynamically

unless RegistrationCode.find_by_code(registration_code)

errors.add(:registration_code, "must be valid")  



Another option is to create a custom validator. Check out that section of the guide: