2011-02-07 14 views
5

Un telefono ha molti messaggi.ActiveRecord Associations: qualsiasi getchas se has_many WITHOUT corrispondente appartiene a?

Un indirizzo di posta elettronica ha molti messaggi.

Un messaggio appartiene a un telefono, a una email oa nessuno dei due. L'associazione belongs_to è facoltativa.

le seguenti associazioni sembrano funzionare bene per queste relazioni:

  • modello del telefono has_many :messages
  • modello Email has_many :messages
  • modello messaggio non deve belongs_to :phones, :email

È questo va bene o è esiste un modo corretto per specificare una relazione "can_belong_to"?

risposta

4

È una relazione unidirezionale completamente corretta. L'utilizzo di entrambi viene talvolta definito "dipendenza curcolare" da alcuni puristi e può causare problemi durante l'utilizzo di validates_associated.

Dall'altro lato utilizzando solo has_many :messages potrebbe non essere sufficiente quando si desidera recuperare le informazioni sul telefono da un messaggio. Generalmente è questione di convenienza.

+0

sì, abbiamo scoperto che senza "appartiene a" non possiamo dire in una vista @ message.phone.username Grazie per la rapida conferma! – jpwynn

1

Il modello con le associazioni belongs_to contiene le chiavi esterne (ad esempio, le tabelle messages avranno colonne phone_id e email_id).

Il belongs_to associazione combinata con has_many consente di accedere facilmente record associati:

phone.messages 
message.phone 

Così senza le belongs_to e FK colonne, l'associazione has_many non è molto utile.

Sembra che in questo caso si desideri una relazione molti-a-molti come has_and_belongs_to_many poiché un messaggio può avere molti destinatari.

Problemi correlati