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.

HTH,

Peter

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")

end

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")  

end

end

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

http://guides.rubyonrails.org/active_record_validations_callbacks.html#custom-validators