Выбрать атрибуты из вложенных рельсов Включает ли связь с ActiveModelSerializer? - PullRequest
0 голосов
/ 21 марта 2020

Так что я боролся с этим в течение нескольких часов, и я надеюсь, что кто-то может помочь.

У меня 3-уровневые отношения, Список, Страница и Приложение.
Список has_many Страницы Страница принадлежит списку и может при желании принадлежать приложению. Приложение has_many Pages

С таким запросом

@account.lists.includes(pages: :app)

Все работает нормально, у меня нет N + 1 запросов, и все они загружаются правильно

Например,

List Load (3.0ms)  SELECT `lists`.* FROM `rotations` WHERE `lists`.`account_id` = 1
Page Load (2.5ms)  SELECT `pages`.* FROM `pages` WHERE `pages`.`list_id` IN (13, 17, 18)
App Load (2.0ms)  SELECT `apps`.* FROM `apps` WHERE `apps`.`id` IN (6, 9, 15)

Моя проблема в том, что все эти операторы SELECT * FROM, хотя записи приложений, в частности, довольно тяжелые. В столбце с именем «content» может быть целых HTML документов

Мне действительно нужно иметь возможность только SELECT apps.id, apps.name FROM приложений .... `. Так что я не загружаю эти полные объекты в память, а просто отбрасываю их все мгновение спустя, когда я рендую только идентификаторы и имена.

Я бы выполнил это вручную, хотя я не могу заставить его работать с ActiveModelSerializer.

Мои сериализаторы довольно стандартны. Список со списком has_many: pages и страницей, принадлежащей_to: app.

Как извлечь атрибуты select только из одной из моих вложенных ассоциаций? Я уверен, что могу использовать joins(), но я не уверен, как это работает с моими сериализаторами?

Приветствия

1 Ответ

0 голосов
/ 21 марта 2020

Хммм .. пытаюсь проверить это в приложении с похожими ассоциациями. Я думаю, что-то вроде этого может работать:

@account.lists.includes(pages: :app).pluck("apps.id", "apps.name")

Это сделает ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ по ассоциациям.

@account.lists.joins(pages: :app).pluck("apps.id", "apps.name")

сделает ВНУТРЕННИЕ СОЕДИНЕНИЯ. Не уверен, что именно вы ищете, без какой-либо дополнительной информации о ваших структурах данных и примерах вывода.

...