2011-02-07 2 views
5

Телефон имеет много сообщений.Ассоциации ActiveRecord: любые gotchas, если has_many WITHOUT соответствует принадлежит_to?

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

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

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

  • Модель телефона has_many :messages
  • Email модель has_many :messages
  • модель сообщения не имеет belongs_to :phones, :email

Является ли это хорошо или существует какой-то правильный способ указать отношение «can_belong_to»?

ответ

4

Это совершенно правильное однонаправленное отношение. Некоторые из них иногда называют «curcular dependency», и могут возникать проблемы при использовании validates_associated.

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

+0

Да, мы выяснили, что без «принадлежит» мы не можем сказать в виде @ message.phone.username Спасибо за быстрое подтверждение! – jpwynn

1

Модель с ассоциациями 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, поскольку сообщение может иметь много получателей.

 Смежные вопросы

  • Нет связанных вопросов^_^