2011-02-07 13 views
5

Un teléfono tiene muchos mensajes.Asociaciones de ActiveRecord: ¿Algún problema si has_many SIN el correspondiente pertenece a_?

Una dirección de correo electrónico tiene muchos mensajes.

Un mensaje pertenece a un teléfono, correo electrónico o ninguno. La asociación belongs_to es opcional.

las siguientes asociaciones parecen funcionar muy bien para estas relaciones:

  • modelo de teléfono has_many :messages
  • Email modelo has_many :messages
  • modelo de mensaje no tiene belongs_to :phones, :email

¿Está bien o está Hay alguna forma adecuada de especificar una relación "can_belong_to"?

Respuesta

4

Es una relación unidireccional completamente correcta. El uso de ambos a veces se denomina "dependencia curcular" por parte de algunos puristas y puede causar problemas al usar validates_associated.

Del otro lado, usar solo has_many :messages puede no ser suficiente cuando desee recuperar información del teléfono de un mensaje. En general, es cuestión de conveniencia.

+0

Sí, descubrimos que sin "belongs_to" no podemos decir en una vista @ message.phone.username ¡Gracias por la confirmación rápida! – jpwynn

1

El modelo con las asociaciones belongs_to contiene las claves externas (por ejemplo, la tabla messages tendría phone_id y email_id columnas).

La asociación belongs_to combinado con has_many le permite acceder fácilmente a los registros asociados:

phone.messages 
message.phone 

Así que sin los belongs_to y FK columnas, la asociación has_many no es muy útil.

Parece que en este caso es posible que desee una relación muchos a muchos, como has_and_belongs_to_many, ya que un mensaje puede tener muchos destinatarios.

Cuestiones relacionadas