Que tal uma associação autorreferencial:
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
O problema é que você está tentando fazer associação relacional usando apenas documentos incorporados. Quando você tem um
Fan
incorporado dentro de um User
, você só pode acessar o Fan
por meio de seu pai User
. Você não pode fazer algo como Fan.find(some_id)
porque não há coleção de Fan
registros. Eventualmente, o MongoDB oferecerá suporte a coleções virtuais que permitirão que você faça isso. Por enquanto, você precisa usar associações do tipo relacional. Se você quiser usar documentos incorporados nesse caso, precisará criar alguns métodos personalizados feios e ineficientes para pesquisar os registros pai.
Com MongoDB e Mongoid, descobri que você pode alternar facilmente entre associações incorporadas e relacionais. Os relacionamentos do tipo SQL e os relacionamentos incorporados têm seu lugar e podem ser usados juntos com grande efeito.