使用graphql-ruby包含/急切加载相关模型

时间:2017-11-11 23:19:35

标签: ruby-on-rails ruby graphql 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运行。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我们为graphql-ruby编写了一个小gem,它通过遍历GraphQL查询生成包含。

https://github.com/thesquarefoot/graphql_includable

对于您的示例,您可以在用户字段解析器中调用User.includes_from_graphql(ctx)

答案 1 :(得分:0)

您应该使用graphql-preload gem来预加载Graphql中的关联

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