Mongoid non ha has_many :through o una funzionalità equivalente. Non sarebbe così utile con MongoDB perché non supporta le query di join, quindi anche se potessi fare riferimento a una raccolta correlata tramite un'altra, richiederebbe comunque più query.
https://github.com/mongoid/mongoid/issues/544
Normalmente se hai una relazione molti-molti in un RDBMS lo modelleresti in modo diverso in MongoDB usando un campo contenente una matrice di chiavi "estranee" su entrambi i lati. Ad esempio:
class Physician
include Mongoid::Document
has_and_belongs_to_many :patients
end
class Patient
include Mongoid::Document
has_and_belongs_to_many :physicians
end
In altre parole elimineresti la tabella di join e avrebbe un effetto simile a has_many :through in termini di accesso all '"altro lato". Ma nel tuo caso probabilmente non è appropriato perché la tua tabella di join è una classe Appointment che contiene alcune informazioni extra, non solo l'associazione.
Il modo in cui lo modelli dipende in una certa misura dalle query che devi eseguire, ma sembra che dovrai aggiungere il modello Appuntamento e definire associazioni a paziente e medico in qualcosa del genere:
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 le relazioni in MongoDB devi sempre scegliere tra documenti incorporati o associati. Nel tuo modello immagino che MeetingNotes sia un buon candidato per una relazione incorporata.
class Appointment
include Mongoid::Document
embeds_many :meeting_notes
end
class MeetingNote
include Mongoid::Document
embedded_in :appointment
end
Ciò significa che puoi recuperare le note insieme a un appuntamento tutti insieme, mentre avresti bisogno di più query se si trattasse di un'associazione. Devi solo tenere a mente il limite di dimensione di 16 MB per un singolo documento che potrebbe entrare in gioco se hai un numero molto elevato di note di riunione.