问题
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:
- Phone model
has_many :messages
- Email model
has_many :messages
- Message model does NOT have
belongs_to :phones, :email
Is this okay or is there some proper way to specify a "can_belong_to" relationship?
回答1:
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.
回答2:
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.
来源:https://stackoverflow.com/questions/4925827/activerecord-associations-any-gotchas-if-has-many-without-corresponding-belongs