Вы можете попробовать изменить определения отношений следующим образом:
has_many :child_sites, :class_name => 'Site', :cyclic => true
belongs_to :parent_site, :class_name => 'Site', :cyclic => true
Я не знаю точно, что он делает, но я помню, что это обсуждалось в Mongoid группе Google. Если это не сработает, попробуйте установить inverse_of
на оба макроса отношения. Большую часть времени настройка inverse_of
правильно выполняет свою работу.
has_many :child_sites, :class_name => 'Site', :inverse_of => :parent_site
belongs_to :parent_site, :class_name => 'Site', :inverse_of => :child_sites
Что касается дополнительных запросов, да, будут дополнительные запросы, когда вы захотите извлечь child_sites сайта или родительский сайт сайта.
Вам следует рассмотреть возможность встраивания дочерних сайтов в родительский сайт, но имейте в виду, что таким образом вы потеряете возможность запрашивать дочерние сайты автономным способом. Вы всегда должны иметь доступ к любому дочернему сайту как «parent_site> child_sites».
Также имейте в виду ограничение размера документа в 16 МБ, которое трудно достичь, но может быть возможным, если имеется много дочерних сайтов для родителя и если вы храните информацию о шаблонах, например html, css и т. Д. в самом документе.