Che ne dici di un'associazione autoreferenziale:
class User
include Mongoid::Document
references_many :fans,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fan_of
references_many :fan_of,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fans
end
# let's say we have users: al, ed, sports_star, movie_star
sports_star.fans << al
movie_star.fans << al
sports_star.fans << ed
movie_star.fans << ed
movie_star.fans # => al, ed
al.fan_of # => sports_star, movie_star
Il problema è che stai cercando di eseguire un'associazione relazionale utilizzando solo documenti incorporati. Quando hai un Fan
incorporato all'interno di un User
, puoi accedere solo al Fan
tramite il suo User
genitore . Non puoi fare qualcosa come Fan.find(some_id)
perché non esiste una raccolta di Fan
record.
Alla fine, MongoDB supporterà raccolte virtuali che ti permetteranno di farlo. Per ora, devi usare le associazioni di tipo relazionale. Se desideri utilizzare i documenti incorporati in questo caso, devi creare dei metodi personalizzati brutti e inefficienti per cercare tra i record principali.
Con MongoDB e Mongoid, ho scoperto che puoi passare facilmente dalle associazioni incorporate a quelle relazionali. Le relazioni di tipo SQL e le relazioni incorporate hanno entrambe il loro posto e possono essere utilizzate insieme con grande efficacia.