graphql-ruby:Int不是定义的输入类型(在$ first上)

时间:2017-06-16 10:47:16

标签: ruby-on-rails ruby graphql graphql-ruby

我有一个问题,我自己似乎无法解决。

与基本的Query,Mutation等类型一起,我做了以下类型定义:

module Types
  UserType = GraphQL::ObjectType.define do
    name 'User'
    description 'A user'

    implements GraphQL::Relay::Node.interface
    global_id_field :id

    field :email, !types.String, 'Email address'

    connection :docs, DocType.connection_type, 'Available docs'
  end  
end

然后我尝试用以下方式查询:

query FileListQuery(
  $after: String
  $first: Int
) {
  viewer {
    currentUser {
      docs(first: $first, after: $after) {
        edges {
          node {
            id
            name
            __typename
          }
          cursor
        }
        pageInfo {
          endCursor
          hasNextPage
          hasPreviousPage
          startCursor
        }
      }
      id
    }
    id
  }
}

我将以下内容作为查询变量传递:

{
  "first": 1,
  "after": null
}

问题是它挽救了以下内容:

{
  "errors": [
    {
      "message": "Int isn't a defined input type (on $first)",
      "locations": [
        {
          "line": 3,
          "column": 3
        }
      ],
      "fields": [
        "query FileListQuery"
      ]
    }
  ]
}

老实说,我不知道为什么抱怨Int类型......

如果我在请求中删除了有问题的$first查询变量,它可以正常工作。

此:

query FileListQuery(
  $after: String
) {
  viewer {
    currentUser {
      docs(first: 10, after: $after) {
        edges {
          node {
            id
            name
            __typename
          }
          cursor
        }
        pageInfo {
          endCursor
          hasNextPage
          hasPreviousPage
          startCursor
        }
      }
      id
    }
    id
  }
}

产生这个:

{
  "data": {
    "viewer": {
      "currentUser": {
        "docs": {
          "edges": [
            {
              "node": {
                "id": "1",
                "name": "First Doc",
                "__typename": "Doc"
              },
              "cursor": "MQ=="
            }
          ],
          "pageInfo": {
            "endCursor": "MQ==",
            "hasNextPage": false,
            "hasPreviousPage": false,
            "startCursor": "MQ=="
          }
        },
        "id": "1"
      },
      "id": "VIEWER"
    }
  }
}

有关如何解决此问题的任何提示,想法?我使用graphql gem v1.6.3。

1 个答案:

答案 0 :(得分:0)

目前,graphql-ruby中似乎存在一个错误,可以防止模式中未明确使用的类型被传播。在GitHub上查看此问题:https://github.com/rmosolgo/graphql-ruby/issues/788#issuecomment-308996229

要修复错误,必须在架构中的某处包含Int字段。原来我没有一个。让人惊讶。

这为我解决了这个问题:

# Make sure Int is included in the schema:
field :testInt, types.Int