【发布时间】:2019-05-04 16:18:09
【问题描述】:
我正在使用 rails 和 graphql-ruby gem 构建我的第一个 GraphQL api。到目前为止,它非常简单,非常棒。
关于重复代码,我现在有点卡住了。我有一个项目管理 Rails 应用程序,它有空间、待办事项(它们属于一个空间)、用户。
我想要实现的是能够查询空间及其待办事项,以及当前用户的所有待办事项。对于待办事项,我希望能够使用不同的参数过滤它们:
完成 - 布尔值, 范围 - 字符串(今天或本周), 受让人 - 整数(用户 ID)
query {
space(id: 5) {
todos(done: false) {
name
done
dueAt
}
}
}
query {
me {
todos(done: false, scope: today) {
name
done
dueAt
}
}
}
这意味着每次我得到现场待办事项时,我都希望能够过滤它们,无论它们是今天完成还是到期等等。
我知道如何使用参数并且一切正常,但目前我一遍又一遍地使用相同的编码器。每次我有相同的 todos 字段时,我如何(以及在哪里)提取该代码以使其可重用?
field :todos, [TodoType], null: true do
argument :done, Boolean, required: false
argument :scope, String, required: false
argument :limit, Integer, required: false
end
【问题讨论】:
-
我没有官方答案,但我知道您可以在 GraphQL 中使用类似查询的范围。这是关于搜索模型的教程:howtographql.com/graphql-ruby/7-filtering 如果您看到
normalize_filters方法,它只是使用 Rails 中的 Scope-like 语法来创建完整的查询。 -
文档在这里提供了一些建议:graphql-ruby.org/fields/resolvers.html
标签: ruby-on-rails ruby graphql