Сделать to_json намного более эффективным для вложенных объектов - PullRequest
0 голосов
/ 07 июля 2011

Рассмотрим типичную реляционную структуру:

Answer has many comments. comments belongs to a user, and have many likers

answers.to_json(:include => {:comments => {:include => :user, :likers}})

Если я позвоню to_json, он будет выполнять поиск в базе данных один за другим для отдельного пользователя в отдельных комментариях.

Гораздо более эффективным решением было бы поместить требуемые идентификаторы для каждого типа в массив, выполнить 3 вызова базы данных, чтобы извлечь их, поместить в хеш и построить json в соответствии с хешем.

Это похоже на довольно распространенный вариант использования. Я подумываю написать для этого свою собственную рекурсивную функцию, но если кто-нибудь может указать мне на то, что уже сделано, это будет здорово!

** Я использую mongoid / mongodb, я не уверен, работает ли он так же в активной записи.

1 Ответ

2 голосов
/ 09 июля 2011

Может быть, вы можете попробовать mongoid eager loading, тогда вы можете запросить mongo точно так же, как AR eager loading

 Answer.includes(:comments, :likers)

Патч все еще не включен в основную ветку mongoid, но вы можете скачать его как независимый самоцвет из здесь

Прочитайте это запрос на получение для получения дополнительной информации

...