2011-02-07 3 views
5

Un téléphone a beaucoup de messages.Associations ActiveRecord: Any gotchas si has_many SANS correspondant à belongs_to?

Une adresse électronique a beaucoup de messages.

Un message appartient à un téléphone, un e-mail ou aucun des deux. L'association belongs_to est facultative.

Les associations suivantes semblent fonctionner très bien pour ces relations: ce bien ou est

  • modèle de téléphone has_many :messages
  • modèle Email has_many :messages
  • modèle de message n'a pas belongs_to :phones, :email

Est y a-t-il une bonne façon de spécifier une relation "can_belong_to"?

Répondre

4

C'est une relation unidirectionnelle complètement correcte. L'utilisation des deux est parfois appelée "dépendance curcular" par certains puristes et peut causer des problèmes lors de l'utilisation validates_associated. De l'autre côté, l'utilisation de has_many :messages peut ne pas suffire lorsque vous souhaitez récupérer les informations téléphoniques d'un message. Généralement, c'est une question de commodité.

+0

ouais nous avons découvert que sans "belongs_to" nous ne pouvons pas dire dans une vue @ message.phone.username Merci pour la confirmation rapide! – jpwynn

1

Le modèle avec les associations belongs_to contient les clés étrangères (par exemple, la table messages contient les colonnes phone_id et).

L'association belongs_to combinée avec has_many vous permet d'accéder facilement aux documents connexes:

phone.messages 
message.phone 

Donc, sans les colonnes belongs_to et FK, l'association has_many est pas très utile.

Il semble que dans ce cas, vous souhaitiez une relation plusieurs-à-plusieurs telle que has_and_belongs_to_many car un message peut avoir plusieurs destinataires.

Questions connexes