Как насчет самореферентной ассоциации:
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
Проблема в том, что вы пытаетесь установить реляционную ассоциацию, используя только встроенные документы.Если у вас есть Fan
, встроенный в User
, вы можете получить доступ к Fan
только через его родительский User
.Вы не можете сделать что-то вроде Fan.find(some_id)
, потому что нет коллекции Fan
записей.
Со временем MongoDB будет поддерживать виртуальные коллекции, которые позволят вам это сделать.На данный момент вы должны использовать ассоциации реляционного типа.Если вы хотите использовать встроенные документы в этом случае, вам нужно создать некрасивые и неэффективные пользовательские методы для поиска по родительским записям.
С MongoDB и Mongoid я обнаружил, что вы можете переключаться между встроенными и реляционными ассоциациямибез труда.Отношения типа SQL и встроенные отношения имеют свое место и могут эффективно использоваться вместе.