Mongoid no tiene has_many :through o una función equivalente. No sería tan útil con MongoDB porque no admite consultas de unión, por lo que incluso si pudiera hacer referencia a una colección relacionada a través de otra, aún requeriría múltiples consultas.
https://github.com/mongoid/mongoid/issues/544
Normalmente, si tiene una relación de muchos a muchos en un RDBMS, lo modelaría de manera diferente en MongoDB usando un campo que contiene una matriz de claves 'foráneas' en cada lado. Por ejemplo:
class Physician
include Mongoid::Document
has_and_belongs_to_many :patients
end
class Patient
include Mongoid::Document
has_and_belongs_to_many :physicians
end
En otras palabras, eliminaría la tabla de unión y tendría un efecto similar a has_many :through en términos de acceso al 'otro lado'. Pero en su caso, eso probablemente no sea apropiado porque su tabla de unión es una clase de cita que contiene información adicional, no solo la asociación.
La forma en que modele esto depende en cierta medida de las consultas que necesite ejecutar, pero parece que necesitará agregar el modelo de Cita y definir asociaciones para Paciente y Médico algo como esto:
class Physician
include Mongoid::Document
has_many :appointments
end
class Appointment
include Mongoid::Document
belongs_to :physician
belongs_to :patient
end
class Patient
include Mongoid::Document
has_many :appointments
end
Con las relaciones en MongoDB, siempre tiene que elegir entre documentos incrustados o asociados. En su modelo, supongo que MeetingNotes es un buen candidato para una relación incrustada.
class Appointment
include Mongoid::Document
embeds_many :meeting_notes
end
class MeetingNote
include Mongoid::Document
embedded_in :appointment
end
Esto significa que puede recuperar todas las notas junto con una cita, mientras que necesitaría varias consultas si se tratara de una asociación. Solo debe tener en cuenta el límite de tamaño de 16 MB para un solo documento que podría entrar en juego si tiene una gran cantidad de notas de reuniones.