I have a standard devise user model with the usual fields.
This is for a situation where people are either looking for a place to stay, or they have a place to stay. So I have two categories of user that a person can be. These two categories are very distinct (i.e. a person looking for a place to stay will have very different fields to a person who has a place to stay).
So a User has:
User: name, email, password, profile_id
A User can also have a Profile (i.e. they are looking for a house).
Profile: age, sexuality, religion, occupation
That’s what I have at the moment. Now I need to change that slightly, so a User can have a profile OR… they can have a House (i.e. they have a house and are looking for more people):
House: price_per_week, address, etc
How best to model this in ActiveRecord? Polymorphic association of some kind?
I’ve found in general that polymorphic relationships don’t work well over time if the objects they are modeling are even mildly different. For your case I’d recommend keeping the two objects separate.
In general, the best way is to consider the way you want to retrieve the data. For example, I’d imagine you want to access both:
or
So I’d recommend beginning by setting up relationships (that can be optional) between the
userstable and both theprofilesandhousestable. I’d also add atypefield that can be used to determine which of the two types the users are.This allows users to be of either type and allows them to have both a
profileand ahouse.So both houses and profiles
belong_tousers, and usershave_many(orhave_one) houses and profiles