A phone has many messages.
An email address has many messages.
A message either belongs to a phone, email, or neither. The belongs_to
association is optional.
The following associations seem to work fine for these relationships:
has_many :messages
has_many :messages
belongs_to :phones, :email
Is this okay or is there some proper way to specify a "can_belong_to" relationship?
They essentially do the same thing, the only difference is what side of the relationship you are on. If a User has a Profile , then in the User class you'd have has_one :profile and in the Profile class you'd have belongs_to :user . To determine who "has" the other object, look at where the foreign key is.
Polymorphic relationship in Rails refers to a type of Active Record association. This concept is used to attach a model to another model that can be of a different type by only having to define one association.
You use a has_many :through relationship when you want to interact with the join table as a Rails model, complete with primary keys and the ability to add custom columns to the joined data.
It is completely correct unidirectional relation. Using both is sometimes called "curcular dependency" by some purists and may cause problems when using validates_associated.
From the other side using only has_many :messages
may be not enough when you want retrieve phone information from one message. Generally it is matter of convenience.
The model with the belongs_to
associations holds the foreign keys (e.g. messages
table would have phone_id
and email_id
columns).
The belongs_to
association combined with has_many
lets you easily access associated records:
phone.messages
message.phone
So without the belongs_to
and FK columns, the has_many
association isn't very useful.
It seems like in this case you may want a many-to-many relationship such as has_and_belongs_to_many
as a message can have many recipients.
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