Я вижу несколько способов сделать это, но я не уверен, какой из них лучший. Сложные отношения не являются сильной стороной MongoDB, и другие NoSQL и запросы могут стать дорогостоящими, если вы начнете сканировать несколько документов для ваших ответов.
Использование где:
Person.where(name: "name").posts.where(postable_id: "id")
Поиск родителя по должности:
Post.where(id: "id").person.only(:name)
(обратите внимание, что postable_id и id не совпадают!)
Однако будьте осторожны. Если все, что вы делаете, - это публикуете сообщения, вам, вероятно, лучше включить имя человека в сообщение и написать обратный вызов, чтобы обновить имя человека, если он изменит свое имя. В качестве альтернативы, если вы ссылаетесь на комментарии человека, почему бы не включить идентификаторы комментариев (или достаточное количество данных для создания ссылки) в модель Person, чтобы можно было получить все комментарии одним вызовом документа. Точно так же, если вы получаете счетчик, используйте обратный вызов, чтобы сделать счетчик сообщений в модели Person, чтобы вы не отображали сотни сообщений каждый раз.
Надеюсь, это поможет, если не предоставит мне дополнительную информацию, и я обновлю ее.