Скажем, у меня есть модель mongoid под названием Foo, которая вставляет много баров.Самостоятельные референтные вложенные документы с использованием Mongoid
Я хотел бы создать связь, в которой Bar связывается с ней. Отношения всегда будут касаться двух документов, которые встроены в один и тот же документ Foo. Кажется, я не могу этого сделать, не обращая внимания на то, что вы называете отношения. Я попытался
belongs_to :discovered_by, :class_name => 'Bar'
, а также
has_one :discovered_by, :class_name => 'Bar'
Хотя discovered_by идентификатор устанавливается в документе Бар и указывая на другой Bar документа, когда я пытаюсь и сделать следующее я получаю ноль (при условии, что первый бар первого Foo имеет множество discovered_by_id)
Foo.first.bars.first.discovered_by
Это всегда будет возвращать ноль, несмотря на doucment, имеющего идентификатор набора. Любая идея о том, почему это происходит? Спасибо за любую помощь.
Я думаю, что мне придется хранить идентификатор, как вы предложили, в своем решении. Не идеальный, но он поддерживает мою цель. Было сказано, что ваш комментарий о пересмотре встроенных документов интересен. Является ли это против «mongo way» делать что-то, чтобы думать о двух документах, которые встроены в один и тот же родительский документ, как это связано? Полагаю, это будет соответствовать реализации Монгоида. – Stewart
Да, в общем, это плохая идея иметь ссылки на встроенные документы. Частично с технической точки зрения (объект, использующий отношение, должен знать объект родителя для каждого слоя встроенных моделей) и проектной точки зрения (вложенные объекты должны быть доступны только через их родителя). Тем не менее, ваш пример - это пример края: вы определенно знаете родительский объект записи, к которой вы обращаетесь ('foo'). Я бы, вероятно, пошел обходным путем - единственный недостаток заключается в том, что вы не можете использовать стандартные 'own_to' и' has_one' помощники. – 2013-03-30 08:31:47