references rails inverse_of has_and_belongs_to_many foreign belong accepts_nested_attributes_for ruby-on-rails activerecord join

ruby on rails - inverse_of - Rails: has_many: through o has_many_and_belongs_to?



rails references (1)

Tengo una aplicación donde quiero vincular una instancia de un modelo a otra instancia del mismo modelo a través de otro modelo (es decir, Tarea 1> Relación <Tarea2) y me pregunto si puedo usar has_many: a través de esto.

Básicamente, el modelo de relación tendría información adicional (type_of_relationship, lag) por lo que sería ideal tenerlo como modelo de unión. Sin embargo, no hay dos modelos para unir, solo uno ... para sí mismo. ¿El has_many: a través de todavía funciona? Si es así, ¿cómo se vería la tabla de unión? Con las convenciones de Rails, tendría dos columnas llamadas Activity_id, que obviamente no funcionarán en la base de datos.

Alternativamente, puedo usar has_many_and_belongs_to para configurar muchos entre el modelo de Tarea y el modelo de Relación, pero no estoy seguro de si esto describe con precisión una relación que solo debe vincular dos modelos de Tarea en cualquier modelo de Relación (aunque, por supuesto, las tareas pueden pertenecer a más de una relación, por lo tanto, muchas-muchas).

Mi instinto me dice que vaya con has_many_and_belongs_to y clasifique las reglas en los modelos, pero ¿hay una mejor manera de hacerlo? ¡Estoy dando vueltas en círculos en este!

Cualquier ayuda apreciada.


has_many: through se adapta perfectamente a tu situación. No conozco los detalles de su modelo, pero digamos que tiene usuarios y cada usuario puede tener otros usuarios como contactos. Puede modelar esta situación de la siguiente manera:

class User < ActiveRecord::Base has_many :contact_records, :foreign_key => :owner_id has_many :contacts, :through => :contact_records, :class_name => "User" end class ContactRecord < ActiveRecord::Base belongs_to :owner, :class_name => "User" belongs_to :user end