Ассоциации ActiveRecord: Есть ли ошибки, если has_many БЕЗ соответствующего - PullRequest
5 голосов
/ 07 февраля 2011

В телефоне много сообщений.

В адресе электронной почты много сообщений.

Сообщение либо принадлежит телефону, электронной почте, либо ни одному.belongs_to связь необязательна.

Следующие ассоциации, кажется, хорошо работают для этих отношений:

  • Модель телефона has_many :messages
  • Модель электронной почты has_many :messages
  • Модель сообщения НЕ имеет belongs_to :phones, :email

Это нормально или есть какой-то правильный способ указать отношение can_belong_to?

Ответы [ 2 ]

4 голосов
/ 07 февраля 2011

Это полностью правильное однонаправленное отношение. Некоторые пуристы иногда называют и то и другое "куркулярной зависимостью" и могут вызывать проблемы при использовании validates_associated .

С другой стороны, использование только has_many :messages может быть недостаточно, если вы хотите получить информацию о телефоне из одного сообщения. Обычно это вопрос удобства.

1 голос
/ 24 апреля 2016

Модель с ассоциациями belongs_to содержит внешние ключи (например, таблица messages будет иметь столбцы phone_id и email_id).

Ассоциация belongs_to в сочетании с has_many позволяет легко получить доступ к связанным записям:

phone.messages
message.phone

То есть без столбцов belongs_to и FK ассоциация has_many не очень полезна.

Похоже, что в этом случае вам может понадобиться отношение многие ко многим, например has_and_belongs_to_many, поскольку сообщение может иметь много получателей.

...