Как избежать рельсов as_ json, создающих поток запросов к базе данных - PullRequest
2 голосов
/ 21 февраля 2020

У меня есть модель вопросы , в которой есть множество тегов через другую модель question_tags . Я пытаюсь написать конечную точку API, которая возвращает список вопросов, а для каждого вопроса - список имени и идентификатора соответствующего тега.

Я сейчас использую;

render json: @questions.as_json(include: {
                                      tags: { only: %i[id name] }
                                    })

Но это запускает отдельный запрос БД для каждого вопроса в вопросах. Есть ли альтернатива, которая приведет к меньшему количеству запросов к базе данных?

1 Ответ

3 голосов
/ 21 февраля 2020

Здесь должны работать стандартные исправления N + 1 запросов, которые в Rails загружаются очень просто.

В этом случае вы можете использовать include для предварительной загрузки связанного tags:

render json: @questions.includes(:tags).as_json(
  include: {
    tags: { only: %i[id name] }
  }
)

Подробнее об этом можно прочитать в специальном разделе руководства по рельсам: Стремительные ассоциации загрузки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...