如何使用 GraphQL 获取所有用户模型

How to get all user model with GraphQL

我已经为此苦苦挣扎了一个多小时,但似乎无法让它发挥作用。

我正在将 GraphQL 的 ruby 实现与 Rails 一起使用,并且我正在尝试使用 GraphQL 进行 User.all。我有以下定义字段用户的 QueryType。

QueryType = GraphQL::ObjectType.define do
  name "Query"
  description "The query root for this schema"

  field :users do
    types[IndexUserType]

    resolve -> () {
      User.all
    }
  end
end

IndexUserType 定义如下:

IndexUserType = GraphQL::ObjectType.define do
  name "IndexUserType"
  description "An Index User"
  field :firstname, types.String
end

我正在尝试使用以下查询获取所有用户的名字:

query={ users { firstname } }

通常我可以在 Has-Many 关系上执行以下操作,但是这不起作用,我认为这是因为 'obj' 不能在没有父项的情况下设置。

resolve -> (obj, args, ctx) {
  obj.cousins
}

经过反复试验,我设法解决了以下问题:

field :users, types[IndexUserType] do
  resolve -> (obj, args, ctx) {
    User.all
  }
end

在您原来的解决方案中,您在块中定义了字段的属性,当您这样做时,您需要通过以下方式声明类型:

field :users do
    type types[IndexUserType] # <-- Note the addition of 'type'
    ...
end

您的第二个解决方案将参数列表中的相同信息传递给 'field',这也有效。这是通过 InstanceDefinable mixin 支持的。您可能想查看 GraphQL::Field 的文档以查看有关如何定义字段的其他示例。如果您想更深入地挖掘,请查看 GraphQL::Define::InstanceDefinable,它可以帮助您了解如何在 Field 和 graphql-ruby [=25= 中的其他 类 中使用此模式].

参见:

http://www.rubydoc.info/github/rmosolgo/graphql-ruby/GraphQL/Field http://www.rubydoc.info/github/rmosolgo/graphql-ruby/GraphQL/Define/InstanceDefinable