включает/стремится загружать связанные модели с помощью graphql-ruby

Я искал примеры того, как перевести традиционный ActiveRecod .includes для связанных моделей при использовании graphQL-ruby, и не нашел ни одного. В качестве варианта использования, допустим, у нас есть следующие модели:

User
has_many :books

Book
belongs_to :user
has_many :chapters

Chapter
belongs_to :book
has_many :pages

Page
belongs_to :chapter

Как мы могли бы реализовать следующее:

User.includes(books: {chapters: :pages})

Фактический вложенный запрос GraphQL относительно прост; однако, похоже, он работает на N+1.

Любая помощь будет принята с благодарностью.


person frostini    schedule 11.11.2017    source источник
comment
Похоже, в этом может помочь новая функция Lookahead в v1.9. graphql-ruby.org/queries/lookahead.html   -  person mpoisot    schedule 09.05.2019


Ответы (2)


Мы написали небольшую жемчужину для graphql-ruby, которая генерирует включения, выполняя запрос GraphQL.

https://github.com/thesquarefoot/graphql_includable

В вашем примере вы должны вызвать User.includes_from_graphql(ctx) в распознавателе поля пользователя.

person Josh Vickery    schedule 08.02.2018
comment
Обратите внимание, что это больше не работает для API на основе классов для graphql. ctx.irep_node также больше не проходит, поэтому требуется новое решение. - person user1581404; 04.12.2018

Вы должны использовать гем graphql-preload для предварительной загрузки ассоциаций в Graphql.

https://github.com/ConsultingMD/graphql-preload

person Krupa Suthar    schedule 05.06.2018