Включает / готово загрузить связанные модели с 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