I have a User class, and a Contact where Contact is a subclass of User. Both classes are stored in a users table.
My Contacts may or may not have an email address, while an email address is required for my Users (I have validates_presence_of :email
in my User model definition).
My reasoning is that Contacts are entered by users and may later become Users when they claim their profile.
validate_presence_of email
validation in my contacts model?(I'm on rails 2.3.8)
Thanks!
UPDATE:
It seems Single Table Inheritance is designed to do exactly what I needed
the right way to skip validation for the presence of email for my Contact table is as follow:
validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}
It sounds like you should abstract out User and Contacts into two tables instead of trying to consolidate them into one. Although contacts can become users, that doesn't mean that they will (I think?).
This would also solve your validate_presence_of :email
question, as the contact table/model wouldn't even have the field. It would also alleviate potential performance concerns later on, I believe. You wouldn't want to have a ton of contacts to sort through to find a registered user.
If you're dead-set on doing it in one table though, I believe you can do something like the following:
validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}
This is assuming that you have a user_type column, but you could replace that depending on how you're determining whether a User
is a Contact
.
Update:
This is how you'd correctly validate the models: Remove the validates_presence_of
from the model and place it inside of this block:
with_options :unless => :user_type == "contact" do |user|
user.validates_presence_of :email
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With