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

Я искал примеры того, как перевести традиционный ActiveRecod.include для связанных моделей, используя 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.

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

2 ответа

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

https://github.com/thesquarefoot/graphql_includable

Для вашего примера вы бы позвонили User.includes_from_graphql(ctx) в резольвере поля пользователя.

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

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

Другие вопросы по тегам